我是杰克逊框架的新手并且在某些方面陷入困境。我正在尝试将JSON消息转换为Java对象,但是我遇到了错误。你能否告诉你解决这个问题的行动方案。
错误:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "coord"
代码
@Test
public void jsonToJava(){
String responseString = "{ \n" +
" \"coord\":{ \n" +
" \"lon\":21.01,\n" +
" \"lat\":52.23\n" +
" }\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
try {
Coord cor = mapper.readValue(responseString, Coord.class);
System.out.println(cor);
} catch (IOException e) {
e.printStackTrace();
}
}
GetterAndSetter类:
public class Coord {
private Double lon;
private Double lat;
public Double getLon() {
return this.lon;
}
public void setLon(Double lon) {
this.lon = lon;
}
public Double getLat() {
return this.lat;
}
public void setLat(Double lon) {
this.lat = lat;
}
}
答案 0 :(得分:0)
这对你班级的json字符串是正确的
String responseString = "{\"lon\":21.01,\"lat\":52.23}";
还请更正您的setLon方法,替换为以下
public void setLat(Double lat) {
this.lat = lat;
}
答案 1 :(得分:0)
你可以通过多种方式实现这一目标,这里有两种方法。
首先,您可以告诉ObjectMapper
解包根值:
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
并将您的Coord
课程更改为以下内容:
@JsonRootName("coord")
public class Coord {
private Double lon;
private Double lat;
// getters and setters
}
要使用@JsonRootName
,您需要jackson-annotations
。如果你正在使用maven,只需添加:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.3</version>
</dependency>
如果您使用的是gradle,请添加:
compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3'
下载
第二种方式,将您的JSON更改为:
{
"lon":21.01,
"lat":52.23
}