java - JsonMappingException : No suitable constructor found for type [simple type, 类 car.Car$Parts]

标签 java json jackson jackson-modules jackson-dataformat-xml

我正在尝试将此 XML 反序列化为 Parts 对象:

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

汽车.java:

package problem.car;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Car {

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

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

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

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

    }

    @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;
        }

    }

    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;
    }
}

虽然我没有发现我的代码有任何问题,但为什么它一直给我以下信息?

com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class problem.car.Car$Parts]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)

最佳答案

答案

Part 类是一个嵌套的非静态类。 为了实例化它,您必须有一个外部类的实例。

Here is an inner class tutorial

我讨厌阅读的答案

将 Part 和 Parts 类移动到它们自己的 java 文件中,命名为 Part.java 和 Parts.java。

关于java - JsonMappingException : No suitable constructor found for type [simple type, 类 car.Car$Parts],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37168501/

相关文章:

java - 使用 Jsoup Java 登录

java - 如何用ajax解析json数组?

javascript - 在 Javascript 中从文件导入数组

java - jackson 无法识别的字段

java - Lombok + jackson 不可变

java - 如何在Java中创建可插拔组件?

java - 如何在 spring 集成中获取发件人 IP 地址?

java - 当代码从 R2007a 移动到 R2013a 时出现 NoClassDefFoundError

json - 在 Swift 中从 OpenWeatherMap 解析 JSON

jackson - Wildfly 9 - 如何排除 jackson