繁体   English   中英

没有Spring Data REST的Spring投影

[英]Spring projections without Spring Data REST

spring-data-rest提供了一种神奇的方式来指定实体视图-Spring projections。 我很好奇是否有一种方法可以在不使用spring-data-rest情况下实现类似的功能-仅存储库和简单的rest控制器。

假设我有一个实体:

@Entity
public class Customer {

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

  private String firstname;
  private String lastname;

  // … 
}

和两个控制器端点。 一个人应该返回完整的实体和该实体的第二个子集(虽然只是第一个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;
}

您可以使用JSON视图过滤掉所需的字段。 这里有一些例子

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM