2 回答
TA贡献1804条经验 获得超2个赞
您可以编写自定义反序列化器并处理这两种情况,或者为ProviderData POJO类编写两个构造函数并正确使用JsonCreator和JsonCreator注释。请参阅以下示例:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.readValue(jsonFile, Response.class));
}
}
class Response {
@JsonProperty("ProviderData")
private ProviderData data;
// getters, setters, toString
}
class ProviderData {
private static final String INVALID_NAME = "INVALID";
private static final String TEXT_NAME = "#text";
@JsonProperty(INVALID_NAME)
private final String invalid;
@JsonProperty(TEXT_NAME)
private final String text;
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public ProviderData(String invalid) {
this(invalid, null);
}
@JsonCreator
public ProviderData(@JsonProperty(INVALID_NAME) String invalid, @JsonProperty(TEXT_NAME) String text) {
this.invalid = invalid;
this.text = text;
}
// getters, toString
}
对于这个JSON有效载荷:
{
"ProviderData": {
"INVALID": "HEX",
"#text": "Sample"
}
}
以上示例打印:
Response{data=ProviderData{invalid='HEX', text='Sample'}}
对于String原始JSON有效载荷:
{
"ProviderData": "1C"
}
以上示例打印:
Response{data=ProviderData{invalid='1C', text='null'}}
如您所见,使用构造函数JSON Object正确映射,使用2-arg构造函数String映射原语1-arg,我们假设此值表示示例中的invalid键JSON Object。
添加回答
举报
