2 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果不想創(chuàng)建新模型以在級(jí)別上進(jìn)行表示,則需要在傳遞到層之前準(zhǔn)備模型。POJO
JSON
REST API
ORM
Jackson
啟用休眠X模塊
您應(yīng)該從啟用最適合您的版本的Hibernate
模塊開始。它解決了許多內(nèi)部數(shù)據(jù)類型問題。Hibernate
lazy-loadings
雙向關(guān)系
閱讀有關(guān)在序列化過程中解決周期問題的選項(xiàng)。主要注釋包括:Jackson
定義適當(dāng)?shù)目梢娦?/h2>
您可以在 上定義全局可見性,如何指定 jackson 以僅使用字段 - 最好是全局的,如果需要使用 JsonAutoDetect 注釋為給定類自定義它。ObjectMapper
查看模型POJO
可能在大多數(shù)情況下,您將能夠重用為 創(chuàng)建的模型。如果使用注釋自定義輸出非常困難,您可以隨時(shí)在額外的映射/業(yè)務(wù)層中手動(dòng)創(chuàng)建自定義類并將模型映射到此類和模型。POJO
ORM
JSON
ORM
自定義序列化器
如果您需要以一般方式處理某些自定義注釋或某些字段,則可以使用BeanSerializerModifier和BeanPropertyWriter。它不容易實(shí)現(xiàn),但它非常強(qiáng)大。請(qǐng)參閱此處的示例用法:Jackson 自定義序列化和反序列化。
如何為雙向關(guān)系和可見性配置完成的簡(jiǎn)單示例:
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.Arrays;
import java.util.List;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
Item item0 = new Item();
item0.setId(1);
item0.setItemName("Item 0");
Item item1 = new Item();
item1.setId(2);
item1.setItemName("Item 1");
List<Item> items = Arrays.asList(item0, item1);
User user = new User();
user.setId(123);
user.setName("Rick");
user.setUserItems(items);
items.forEach(item -> item.setOwner(user));
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
System.out.println(mapper.writeValueAsString(user));
}
}
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
class User {
private int id;
private String name;
private List<Item> userItems;
// getters, setters
}
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
class Item {
private int id;
private String itemName;
private User owner;
// getters, setters
}
以上代碼打?。?/p>
{"id":123,"name":"Rick","userItems":[{"id":1,"itemName":"Item 0","owner":123},{"id":2,"itemName":"Item 1","owner":123}]}
添加回答
舉報(bào)