本文介紹了如何在JAX-RS中映射動(dòng)態(tài)JSON的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我必須使用JAX-RS(RESTEasy作為實(shí)現(xiàn))將JSON映射到Java PoJO。問題是,JSON是動(dòng)態(tài)的。請看這個(gè)例子:
{
"typeCode": "SAMPLE",
"data": [
{
"id": "COMMENTS",
"answerValue": {
"type": "YesNoAnswer",
"value": true
}
},
{
"id": "CHOICE",
"answerValue": {
"type": "SelectListAnswer",
"values": ["choice1", "choice2"]
}
}
]
}
動(dòng)態(tài)元素在數(shù)據(jù)數(shù)組中。原則上,每個(gè)條目都有一個(gè)ID和一個(gè)swerValue。但AnswerValue是動(dòng)態(tài)的。根據(jù)他的類型,他可以具有單個(gè)值(布爾值、字符串、對對象進(jìn)行編號(hào))或一組值。
如何將其映射到我的Java模型?
推薦答案
感謝他的解決方案@Henrik。在執(zhí)行他的建議時(shí),我發(fā)現(xiàn)了一個(gè)不同的解決方案,這個(gè)方案更適合我。
我只是使用JsonSubTypes Annotation來處理繼承。
這是我的例子:
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = YesNoAnswer.class, name = "YesNoAnswer"),
@JsonSubTypes.Type(value = SelectListAnswer.class, name="SelectListAnswer"),
@JsonSubTypes.Type(value = SelectAddressAnswer.class, name="SelectAddressAnswer")})
abstract class RequestFormAnswer {
private String type;
}
這篇關(guān)于如何在JAX-RS中映射動(dòng)態(tài)JSON的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,