java - jackson 无法识别的类(class)名称字段

标签 java json jackson

以下是 JSON 字符串的样子

{
    "employee": {
        "id": "c1654935-2602-4a0d-ad0f-ca1d514a8a5d",
        "name": "smith"
        ...
    }
}

现在我正在使用 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;
    }
    ...
}

我得到的异常是

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: 
Unrecognized field "employee" (class com.abc.Employee), not marked as
ignorable (12 known properties: , "id", "name", ... [truncated]])

我无法理解为什么“员工”被视为属性(property)。我假设只有类成员被视为属性是错误的吗?

最佳答案

问题是 JSON 对象 { } 映射到 Java 类,JSON 中的属性映射到 Java 属性。您的 JSON 中的第一个 { }(您正试图将其解码为 Employee)具有属性 employeeEmployee 类没有属性。这就是你收到错误的原因。如果您尝试仅解码随附的 { }

{
  "id": "c1654935-2602-4a0d-ad0f-ca1d514a8a5d",
  "name": "smith"
}

它会起作用,因为 Employee 具有这些属性。如果您无法控制 JSON,则可以配置 ObjectMapper 来解包根值

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

但是您可能还有另一个问题。展开基于 Employee 类上的注释,@JsonRootName("employee")@XmlRootElement(name = "employee")。但是对于后者,您需要确保具有 JAXB 注释支持。为此,您需要拥有 jackson-module-jaxb-annotations , 然后注册模块

mapper.registerModule(new JaxbAnnotationModule());

这适用于您正在使用的所有 JAXB 注释。没有这个模块,它们将无法工作。

关于java - jackson 无法识别的类(class)名称字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29932399/

相关文章:

android - 使用 Proguard 时使用 jackson-json 库的问题

java - 不幸的是谷歌地图已经停止

java - Hibernate EnVers 中的@NotAudited 和 RelationTargetAuditMode.NOT_AUDITED 有什么区别?

java - 字符串中的逗号分隔值到 vector - Java

java - 将 Java 对象转换为 Json,反之亦然?

javascript - JSON/Javascript : return which array object contains a certain property

Java 扫描器类 (System.in)

java - 如何将 json 数组从 recyclerView 传递到另一个 Activity

java - jackson 的 ObjectMapper 错误

java - Json Jackson 自定义属性字段