为了账号安全,请及时绑定邮箱和手机立即绑定

没有 Spring Data REST 的 Spring 投影

没有 Spring Data REST 的 Spring 投影

素胚勾勒不出你 2021-09-12 14:20:42
spring-data-rest提供了一种如何指定实体视图的绝妙方法 - Spring 投影。我很好奇是否有一种方法可以在不使用的情况下实现类似的功能spring-data-rest- 只是存储库和简单的休息控制器。假设我有一个实体:@Entitypublic class Customer {  @Id  @GeneratedValue(strategy = GenerationType.AUTO)  private Long id;  private String firstname;  private String lastname;  // … }和两个控制器端点。应该返回完整实体和实体的第二个子集(等式 just firstname,尽管真实示例有点复杂)。基本上,我想避免从某些端点返回嵌套集合。我知道我可以通过创建指向同一个表的第二个实体来实现这一点,该表只包含所需的值,但问题是我还必须为它创建一个单独的存储库,它会创建很多不必要的样板。所以我的问题是,我是否需要有两个实体和两个单独的存储库,还是有一些更优雅的方法可以在 Spring 中做到这一点?
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

您可以使用JSON 视图过滤掉您需要的字段。下面是一些例子

或者,您可以创建一个 DTO 而不是一个完整的实体,但恕我直言,这是一种优雅的方法。


查看完整回答
反对 回复 2021-09-12
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您可以使用 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;

}


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信