【问题标题】:Jackson deserialize anonymous complex type results in Unrecognized field ""杰克逊反序列化匿名复杂类型导致无法识别的字段“”
【发布时间】:2022-01-31 16:34:02
【问题描述】:

我收到以下异常:

Unrecognized field "" (class my.package.RequestParameter), not marked as ignorable (2 known properties: "value", "name"])
 at [Source: (StringReader); line: 1, column: 64] (through reference chain: my.package.RequestParameter[""])
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "" (class my.package.RequestParameter), not marked as ignorable (2 known properties: "value", "name"])

当我尝试反序列化以下条目时:

"<requestParameter name=\"myId\">5482973821</requestParameter>"

到我的目标 Pojo:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
        "value"
})
@Getter
@Setter
@NoArgsConstructor
public class RequestParameter {
    @XmlValue
    protected String value;
    @XmlAttribute(name = "name")
    protected String name;
}

使用:

RequestParameter requestParameter = new XmlMapper().readValue(in, RequestParameter.class);

有人知道我错过了什么吗?感谢您的关注。

【问题讨论】:

    标签: java xml jackson


    【解决方案1】:

    您可以在课堂上的 value 字段上使用 JacksonXmlText 注释:

    @Getter
    @Setter
    @ToString
    @NoArgsConstructor
    public class RequestParameter {
    
        @XmlValue
        @JacksonXmlText //<-- the new annotation
        protected String value;
        @XmlAttribute(name = "name")
        protected String name;
    }
    
    RequestParameter requestParameter = mapper.readValue(msg, RequestParameter.class);
    //it will print RequestParameter(value=5482973821, name=myId)
    System.out.println(requestParameter);
    

    请注意,如果您想序列化它,您将不会获得相同的起始 xml,但由于 name 字段将在与原始 xml 不同的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 2012-01-14
      • 2020-06-18
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多