猿问

没有 Spring Data REST 的 Spring 投影

spring-data-rest提供了一种如何指定实体视图的绝妙方法 - Spring 投影。我很好奇是否有一种方法可以在不使用的情况下实现类似的功能spring-data-rest- 只是存储库和简单的休息控制器。


假设我有一个实体:


@Entity

public class Customer {


  @Id

  @GeneratedValue(strategy = GenerationType.AUTO)

  private Long id;


  private String firstname;

  private String lastname;


  // … 

}

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


我知道我可以通过创建指向同一个表的第二个实体来实现这一点,该表只包含所需的值,但问题是我还必须为它创建一个单独的存储库,它会创建很多不必要的样板。


所以我的问题是,我是否需要有两个实体和两个单独的存储库,还是有一些更优雅的方法可以在 Spring 中做到这一点?


素胚勾勒不出你
浏览 134回答 2
2回答

三国纷争

您可以使用JSON 视图过滤掉您需要的字段。下面是一些例子。或者,您可以创建一个 DTO 而不是一个完整的实体,但恕我直言,这是一种优雅的方法。

MMMHUHU

您可以使用 Spring 的属性过滤器从对 API 的响应中过滤掉一些字段:@RequestMapping(...)public MappingJacksonValue getUserEntities(...)&nbsp;&nbsp; &nbsp; Page<UserEntity> entities = service.findAll();&nbsp; &nbsp; MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(entities);&nbsp; &nbsp; FilterProvider filters = new SimpleFilterProvider()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .addFilter("UserEntity", SimpleBeanPropertyFilter&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filterOutAllExcept("fieldName"));&nbsp; &nbsp; mappingJacksonValue.setFilters(filters);&nbsp; &nbsp; return mappingJacksonValue;}
随时随地看视频慕课网APP

相关分类

Java
我要回答