以下是JSON字符串的外观
{
"employee": {
"id": "c1654935-2602-4a0d-ad0f-ca1d514a8a5d",
"name": "smith"
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在我用ObjectMapper#readValue(jsonAsStr,Employee.class)它将它转换为JSON.我的Employee班级如下......
@XmlRootElement(name="employee")
public class Employee implements Serializable {
private String id;
private String name;
...
public Employee() {
}
@XmlElement(name="id")
public String getId() {
return id;
}
public void setId(String id) {
this.id= id;
}
@XmlElement(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我得到的例外是
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "employee" (class com.abc.Employee), not marked as
ignorable (12 known properties: , "id", "name", ... [truncated]])
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么"员工"被视为财产.假设只有班级成员被视为财产,我错了吗?
问题是JSON对象{ }映射到Java类,JSON中的属性映射到Java属性.{ }你的JSON中的第一个(你试图解组Employee),有一个属性employee,Employee该类没有属性.这就是你得到错误的原因.如果你只是尝试解组封闭的{ }
{
"id": "c1654935-2602-4a0d-ad0f-ca1d514a8a5d",
"name": "smith"
}
Run Code Online (Sandbox Code Playgroud)
它会像Employee那些属性一样工作.如果您无法控制JSON,则可以配置ObjectMapper以解包根值
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
Run Code Online (Sandbox Code Playgroud)
但是你可能还有另外一个问题.展开是基于Employee类的注释,@JsonRootName("employee")或者@XmlRootElement(name = "employee").但是,使用后者,您需要确保您具有JAXB注释支持.为此,您需要使用jackson-module-jaxb-annotations,然后注册模块
mapper.registerModule(new JaxbAnnotationModule());
Run Code Online (Sandbox Code Playgroud)
这适用于您正在使用的所有JAXB注释.没有这个模块,它们将无法工作.
| 归档时间: |
|
| 查看次数: |
4053 次 |
| 最近记录: |