当前位置: 首页 > 知识库问答 >
问题:

使用com.fasterxml.jackson.databind无法识别的字段

楚苏燕
2023-03-14

我有一个具有此结构的 xsd 文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns="someurl" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="someurl" 
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Accesso">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Identificativo" type="idAccesso"/>
            <xs:element ref="Erogatore"/>
            <xs:element ref="Entrata"/>
            <xs:element name="ModalitaArrivo" type="modalitaArrivo"/>
            <xs:element ref="CentraleOperativa" minOccurs="0"/>
            <xs:element name="ResponsabileInvio" type="responsabileInvio"/>
            <xs:element name="IstitutoProvenienza" type="istitutoProvenienza" minOccurs="0"/>
            <xs:element name="ProblemaPrincipale" type="problemaPrincipale"/>
            <xs:element name="Trauma" type="trauma" minOccurs="0"/>
            <xs:element name="Triage" type="triageAccesso"/>
            <xs:element ref="Assistito"/>
            <xs:element ref="Importo" minOccurs="0"/>
            <xs:element name="TipoTrasmissione" type="tipoTrasmissione"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="Assistito">
    ... xml code ...
</xs:element>
<xs:element name="CentraleOperativa">
    ... xml code ...
</xs:element>
<xs:element name="flsProSoc">
    <xs:complexType mixed="true">
        <xs:choice>
            <xs:element ref="Accesso" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
    </xs:complexType>
</xs:element>

... others ref fields ...
</xs:schema>

所以,我已经用jaxb2生成了java类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
   "content"
})
@XmlRootElement(name = "flsProSoc")
html" target="_blank">public class FlsProSoc {

    @XmlElementRef(name = "Accesso", namespace = "someurl", type = Accesso.class, required = false)
    @XmlMixed
    protected List<Object> content;


    public List<Object> getContent() {
        if (content == null) {
            content = new ArrayList<Object>();
        }
        return this.content;
    }
}

Accesso 类和其他类也是如此。这是我尝试反序列化的xml文件的一个例子:

<?xml version="1.0"?>
<flsProSoc xmlns="url" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Accesso>
     <Identificativo></Identificativo>
     <Erogatore>... xml fields ...</Erogatore>
     <Entrata>... xml fields ...</Entrata>
     <ModalitaArrivo></ModalitaArrivo>
     <CentraleOperativa>... xml fields ...</CentraleOperativa>
     <ResponsabileInvio></ResponsabileInvio>
     <ProblemaPrincipale></ProblemaPrincipale>
     <Triage></Triage>
     <Assistito>... xml fields ...</Assistito>
     <Importo>... xml fields ...</Importo>
     <TipoTrasmissione>I</TipoTrasmissione>
 </Accesso>

 <Accesso> ... </Accesso>
 <Accesso> ... </Accesso>
 <Accesso> ... </Accesso>
 <Accesso> ... </Accesso>

但是当我要反序列化某个xml文件时,我得到了这个错误:

com.fasterxml.jackson.databind.exc.未识别的字段Accesso(类com.xx.yy.FlsProSoc),未标记为不可忽略(一个已知的属性:内容])在[Source:(File); line: 4,列: 21](通过引用链:com.xx.yy.FlsProSoc["Accesso"])

我在gradle中使用这个依赖项

compile 'com.fasterxml.jackson.core:jackson-core:2.11.0'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.11.0'
compile 'com.fasterxml.jackson.core:jackson-databind:2.11.0'
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.0'
compile 'org.codehaus.woodstox:woodstox-core-asl:4.4.1'

我尝试使用:

(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

有了这个,没有例外,但我也没有从我的xml中获得数据。有人能帮忙解决这个问题吗?

共有1个答案

毛越
2023-03-14

解决方案是使用

@JsonProperty("Accesso")

就在FlsProSoc类中的getContent()方法之前。

 类似资料:
  • 问题内容: 我遇到反序列化问题: 这是我的课: 我要反序列化的JSON是: 我得到这个异常: 我不想添加: 因为我想得到ResObj … 如果我添加了注释,它将通过,但会将其设置为null ..这是我不想要的。 问题答案: 如果您不想在bean中使用设置器,而只使用字段和获取器,则可以使用ObjectMapper的可见性检查器来允许字段可见。像下面这样

  • 问题内容: 我使用杰克逊将JSON转换为Object类。 JSON: 对象类别: 码: 我的代码抛出这样的异常: 而且我不想在Test类上添加一个道具,我只是想让jackson转换Test中也存在的存在值。 问题答案: Jackson提供了几种不同的机制来配置“额外” JSON元素的处理。以下是将to 配置为not 的示例。 有关其他方法,请参见http://wiki.fasterxml.com/

  • 我正在开发与我的服务器通信的web应用程序。这种通信是通过Spring框架和react JS完成的。我正在发送一个请求,请求我的服务器读取json,但是我得到了这个错误 错误反应控制台: 未捕获(在promise中)错误:请求失败,状态代码为400

  • 我有一个thymeleaf表单和Spring引导后端。我有一个model类,它的getters和setters名称有点不同。因此,当我要取那个模型并将它的字段作为表单输入字段时,Tymeleaf不能将它们识别为字段。 窗体适用于区域字段。但对Amt字段不起作用。如果我将isAmt()get方法更改为getIsAmt(),也许我可以修复这个问题。但是我不能更改模态类的任何方法名,因为这个类已经编译好

  • 我试图张贴消息(包含英文和中文)到一个服务器。如果我使用Java应用程序来张贴消息,它工作得很好。 虽然我在Android中使用HttpPost,但服务器会收到无法识别的字符,例如 "æ¸åå¤§å ¦". 我尝试使用HttpURLConnection发布消息,结果也包含无法识别的字符。Java应用程序中的HttpClient和Android应用程序中的HttpClient有什么区别?非常奇怪。

  • 我有以下序列