简体   繁体   English

com.fasterxml.jackson.databind.JsonMappingException:无法实例化类型[简单类型,类car.Part]的值

[英]com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class car.Part]

I'm trying to deserialize this XML into a Parts object: 我正在尝试将此XML反序列化为Parts对象:

<Parts>
    <Part>
                <Name>gearbox</Name>
                <Year>1990</Year>
    </Part>
    <Part>
                <Name>wheel</Name>
                <Year>2000</Year>
    </Part>
</Parts>

Car.java : Car.java

package problem.car;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Car {

    public static void main(String args[]) {
        try {
            String xml = "<Parts>\n"
                    + " <Part>\n"
                    + "             <Name>gearbox</Name>\n"
                    + "             <Year>1990</Year>\n"
                    + " </Part>\n"
                    + " <Part>\n"
                    + "             <Name>wheel</Name>\n"
                    + "             <Year>2000</Year>\n"
                    + " </Part>\n"
                    + "</Parts>";
            Parts parts = (Parts) deserialize(Parts.class, xml);
        } catch (IOException ex) {
            Logger.getLogger(Car.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static final Object deserialize(final Class clazz, final String xml) throws IOException {
        ObjectMapper xmlMapper = new XmlMapper();
        xmlMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"));
        Object object;
        try {
            object = xmlMapper.readValue(xml, clazz);
        } catch (com.fasterxml.jackson.databind.exc.InvalidFormatException ex) {
            xmlMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
            object = xmlMapper.readValue(xml, clazz);
        }
        return object;
    }
}

Parts.java : Parts.java

package problem.car;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import java.util.ArrayList;
import java.util.List;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "Part"
})
public class Parts {

    @JsonProperty("Part")
    private List<Part> Part = new ArrayList<>();

    @JsonProperty("Part")
    public List<Part> getPart() {
        return Part;
    }

    @JsonProperty("Part")
    public void setPart(List<Part> Part) {
        this.Part = Part;
    }

}

Part.java : Part.java

package problem.car;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "Name",
    "Year"
})
public class Part {

    @JsonProperty("Name")
    private String Name;
    @JsonProperty("Year")
    private String Year;

    @JsonProperty("Name")
    public String getName() {
        return Name;
    }

    @JsonProperty("Name")
    public void setName(String Name) {
        this.Name = Name;
    }

    @JsonProperty("Year")
    public String getYear() {
        return Year;
    }

    @JsonProperty("Year")
    public void setYear(String Year) {
        this.Year = Year;
    }

}

I don't see anything wrong with my code though so why does it keep giving me the following? 尽管我的代码没有发现任何问题,但是为什么它不断为我提供以下内容?

com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class problem.car.Part] from String value ('gearbox'); no single-String constructor/factory method
 at [Source: java.io.StringReader@598067a5; line: 3, column: 28] (through reference chain: problem.car.Parts["Part"]->java.util.ArrayList[0])

You need to disable use of "wrapped" lists, to match the structure. 您需要禁用“包装”列表的使用,以匹配结构。 This should be explained on README page of xml dataformat github project page. 这应该在xml数据格式github项目页面的README页面上进行解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 com.fasterxml.jackson.databind.JsonMappingException 无法构造类的实例 - com.fasterxml.jackson.databind.JsonMappingException not able to construct instance of class com.fasterxml.jackson.databind.JsonMappingException 在成员类型和访问器方法之间存在不一致时通过引用链 - com.fasterxml.jackson.databind.JsonMappingException through reference chain when there is inconsistency between member type and accessor methods JsonMappingException:找不到类型[simple type,class com.fasterxml.jackson.databind.node.ObjectNode]的合适构造函数 - JsonMappingException: No suitable constructor found for type [simple type, class com.fasterxml.jackson.databind.node.ObjectNode] com.fasterxml.jackson.databind.JsonMappingException:无法构造实例:poja class 找不到合适的构造函数 - com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of : poja class no suitable constructor found 如何解决com.fasterxml.jackson.databind.JsonMappingException? - How to solve the com.fasterxml.jackson.databind.JsonMappingException? 无法读取文件:N / A com.fasterxml.jackson.databind.JsonMappingException - Could not read document: N/A com.fasterxml.jackson.databind.JsonMappingException Weblogic 12.2.1.3上的com.fasterxml.jackson.databind.JsonMappingException - com.fasterxml.jackson.databind.JsonMappingException on Weblogic 12.2.1.3 错误:com.fasterxml.jackson.databind.JsonMappingException:未找到序列化程序 - error: com.fasterxml.jackson.databind.JsonMappingException: No serializer found “com.fasterxml.jackson.databind.JsonMappingException:预期类型为浮点数、整数或字符串。” 使用 ObjectMapper 转换 java.time.Instant - "com.fasterxml.jackson.databind.JsonMappingException: Expected type float, integer, or string." converting the java.time.Instant with ObjectMapper com.fasterxml.jackson.databind.JsonMappingException:无限递归 - com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM