1. 程式人生 > >Spring Data Rest學習篇----Object Representation (實體物件展現)

Spring Data Rest學習篇----Object Representation (實體物件展現)

Spring Data Rest---Object Representation(實體物件展現)

對應spring-data-rest-reference 的第7章

在HTTP請求中,Spring Data Rest為一個請求返回一個指定資料格式的物件,目前,Spring Data Rest只支援JSON格式資料,在未來也可以支援其他格式的資料展現。如果使用者發現物件模型沒有正確地轉換到JSON資料,那麼你可以有很多種方法結構化你的資料。

在Jackson的ObjectMapper中新增自定義的序列化和反序列化工具,為了容納最大比例的使用者事例,Spring Data Rest儘量正確地渲染物件模型,必要的時候,它會為管理到的bean物件建立連結,而且會序列化沒有被管理的bean,作為普通的Java物件。

例子:抽象類註冊bean

在一個實體類中使用到了抽象類的物件作為屬性,Jackson預設是不識別此抽象類的具體實現類。

@Entity
public class MyEntity {
    @OneToMany
    private List<MyInterface> interfaces;
}

可以通過兩種方式去實現抽象類的子類實現選擇,

1.第一種方式

@Override
protected void configureJacksonObjectMapper(ObjectMapper objectMapper) {
    objectMapper.registerModule(new SimpleModule("MyCustomModule") {
    @Override
     public void setupModule(SetupContext context) {
    context.addAbstractTypeResolver(
    new SimpleAbstractTypeResolver().addMapping(MyInterface.class,
    MyInterfaceImpl.class)
);
}
});
}

2.第二種方式

@Override
public void setupModule(SetupContext context) {
    SimpleSerializers serializers = new SimpleSerializers();
    SimpleDeserializers deserializers = new SimpleDeserializers();
    serializers.addSerializer(MyEntity.class, new MyEntitySerializer());
    deserializers.addDeserializer(MyEntity.class,new MyEntityDeserializer());
    context.addSerializers(serializers);
    context.addDeserializers(deserializers);
}