java - 没有 Spring Data REST 的 Spring 投影

标签 java spring-boot spring-data-jpa

spring-data-rest 提供了一种奇妙的方式来指定实体的 View - Spring 投影。我很好奇是否有一种方法可以在不使用 spring-data-rest 的情况下实现类似的功能 - 只需存储库和简单的休息 Controller 。

假设我有一个实体:

@Entity
public class Customer {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  private String firstname;
  private String lastname;

  // … 
}

和两个 Controller 端点。应该返回完整的实体和该实体的第二个子集(例如,只是firstname,尽管真实的示例有点复杂)。基本上,我想避免从某些端点返回嵌套集合。

我知道我可以通过创建第二个实体指向仅包含所需值的同一个表来实现此目的,但问题是我还必须为其创建一个单独的存储库,并且它会创建很多不必要的信息样板文件。

所以我的问题是,我是否需要有两个具有两个独立存储库的实体,或者是否有一些更优雅的方法如何在 Spring 中做到这一点?

最佳答案

您可以使用 Spring 的属性过滤器从对 API 的响应中过滤掉一些字段:

@RequestMapping(...)
public MappingJacksonValue getUserEntities(...) 
    Page<UserEntity> entities = service.findAll();
    MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(entities);
    FilterProvider filters = new SimpleFilterProvider()
                .addFilter("UserEntity", SimpleBeanPropertyFilter
                        .filterOutAllExcept("fieldName"));
    mappingJacksonValue.setFilters(filters);
    return mappingJacksonValue;
}

关于java - 没有 Spring Data REST 的 Spring 投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52252607/

相关文章:

java - Spring bean 已创建,但在 Autowiring 时为空

java - 使用guava将集合映射到id

java - com.petar.demoreferrals.service.impl.UserServiceImpl 中的字段存储库需要一个 bean

postgresql - 如何禁用嵌入式数据库 Spring-boot spring-data-jpa

java - 任何推荐的 Java 分析教程?

java - 将巨大的模式编译成 Java

spring-boot - Ignite CrudRepository 仍然遇到 deleteAll 的名称冲突

java - 动态字段 thymeleaf 列表迭代

java - 优化 Spring Boot JPA 查询

java - 带有迭代器的 ConcurrentModificationException