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/