spring-data-rest
提供了一种神奇的方式来指定实体的视图-弹簧投影。我很好奇是否有一种无需使用spring-data-rest
即可实现类似功能的方法-仅存储库和简单的rest控制器。
假设我有一个实体:
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstname;
private String lastname;
// …
}
和两个控制器端点。一个应该返回完整的实体和该实体的第二个子集(尽管实际示例稍微复杂一点,但仅返回firstname
)。基本上,我想避免从某些端点返回嵌套集合。
我知道我可以通过创建第二个实体来实现这一点,该实体指向仅包含所需值的同一张表,但问题是我也必须为其创建一个单独的存储库,并且它会创建许多不必要的存储库样板。
所以我的问题是,我是否需要具有两个带有两个单独存储库的实体,还是在Spring中有一些更优雅的方法?
答案 0 :(得分:3)
您可以使用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;
}
答案 1 :(得分:1)
您可以使用JSON Views过滤出所需的字段。这是一些examples。
或者,您可以创建DTO而不是完整实体,但是恕我直言,这是一种优雅的方法。