我知道有很多这样的帖子,但我仍然无法找到合适的anwser。Json Jackson不反序列化内部对象(null属性)
我需要解析来自网络
{
"args": {
},
"headers": {
"Accept": "application/json",
"Accept-Encoding": "gzip",
"Content-Length": "0",
"Host": "httpbin.org",
"User-Agent": "Dalvik/1.6.0 (Linux; U; Android 4.3; C5303 Build/12.1.A.1.205)"
},
"origin": "91.193.147.8",
"url": "https://httpbin.org/get"
}
给出的Json我有2个班
第一个拥有所有的信息从网站上得到
public class WebJSONObject {
@JsonDeserialize(using = HeadersDeserializer.class)
private Headers headers;
private String origin;
private String url;
//getters and seters
}
它包括这个样子头类:
@JsonRootName("headers")
public class Headers {
@JsonProperty("Accept")
private String accept;
@JsonProperty("Accept-Encoding")
private String acceptEncoding;
@JsonProperty("Content-Length")
private String contentLenght;
@JsonProperty("Host")
private String host;
@JsonProperty("User-Agent")
private String userAgent;
//Getters and setters
}
个
属性,如起源和URL正确解析 但与头类的问题
这里是我的derserializer
public class HeadersDeserializer extends JsonDeserializer<Headers> {
@Override
public Headers deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
JsonNode node = mapper.readTree(jsonParser);
//for testing issue (parsing properly)
//Json String: {"origin":"91.193.147.8","url":"https://httpbin.org/get"}
TreeNode tree = jsonParser.getCodec().readTree(jsonParser);
String node_as_text2 = tree.toString();
WebJSONObject wbo = mapper.readValue(node_as_text2,WebJSONObject.class);
//Json String {"Accept":"application/json","Accept-Encoding":"gzip","Content-Length":"0","Host":"httpbin.org","User-Agent":"Dalvik/1.6.0 (Linux; U; Android 4.3; C5303 Build/12.1.A.1.205)"}
String node_as_text = mapper.writeValueAsString(node);
Headers headers = mapper.readValue(node_as_text,Headers.class);
return headers;
}
}
而且这里的时候,我做WebJsonObject的测试,分析它做得很好(来源和url充满了valuse) 问题是当我解析头,所有的属性都填充null。
用户reftrofit并从给定响应 –
创建POJO你甚至需要@JsonDeserialize?我认为你想达到的目标完全不需要。如果你只是评论该行,会发生什么? – Fabio
当我删除这条线仍然不解析。空值或标头类的属性 –