java - 如何将 @Projection 分配给 @GetMapping spring servlet 端点?

标签 java json spring spring-data spring-rest

我有一个@Entity Person类,并希望通过网络服务公开它。应该有一个方法只公开所有详细信息,并且端点仅公开 View 摘录。

我可以使用 Spring @Projection为此目的,无需手动提取我想要公开的字段?我宁愿只返回 List<Person>但仅呈现某些端点的某些详细信息。

@RestController
public class BookingInfoServlet {
    @Autowired
    private PersonRepository dao;

    @GetMapping("/persons")
    public List<Person> persons() {
        return dao.findAll();
    }

    //TODO how can I assign the Projection here?
    @GetMapping("/personsView")
    public List<Person> persons() {
        return dao.findAll();
    }

    //only expose certain properties
    @Projection(types = Person.class)
    public interface PersonView {
        String getLastname();
    }
}

@Entity
public class Person {
    @id
    long id;

    String firstname, lastname, age, etc;
}

interface PersonRepository extends CrudRepository<Person, Long> {
}

最佳答案

请注意,@Projection 仅适用于 Spring Data Rest。我相信你可以尝试这个:

@Projection(name = "personView",  types = Person.class)
public interface PersonView {
    String getLastname();
}

在你的仓库中,你需要这样的东西:

@RepositoryRestResource(excerptProjection = PersonView.class)
interface PersonRepository extends CrudRepository<Person, Long> {
}

关于java - 如何将 @Projection 分配给 @GetMapping spring servlet 端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51404922/

相关文章:

java - 由于 "unable to create new native thread"导致 OutOfMemory 时的堆转储

java - 如何从 JS 调用 Controller 以便 Controller 可以执行其请求映射?

java - Mongo Flux/Mono 获取对象

javascript - 外部文件 Chrome 扩展程序

java - JPA with Hibernate - 如果实现复合键则缺少列

java - ActionListener java 遇到问题

android - 如何将整数 ArrayList 添加到 MultipartBody

ios - 将 JSON 数组反序列化为对象的 Swift 数组

java - Spring Boot JPA 不会在单个测试范围内保留更改

java - Spring 4.2 中 EhCacheManager 出现类未找到异常