簡體   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