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

MismatchedInputException-Jackson反序列化

燕智
2023-03-14

我在试着读我的。json文件。Is是一个车辆存储类。

"{\"vehicles\":[{\"id\":\"9467d079-4502-4dba-9d23-b8506dfc7ef4\",\"plate\":\"ghghghhg\",\"manufacturer\":\"Alfa Romeo\",\"model\":\"hgghgh\",\"color\":\"Amarelo\"}]}"

这是错误:

com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造车辆存储库的实例(尽管至少存在一个Creator):无法构造车辆存储库的实例(尽管至少存在一个Creator):没有字符串参数构造函数/工厂方法来从[Source:(File); line: 1,列: 1]处的字符串值反序列化

创建<代码>。我正在使用的json文件:

repository.vehicles = new ArrayList<Vehicle>();
repository.vehicles.add(vehicle);           

json = mapper.writeValueAsString(repository);   

ObjectMapper write = new ObjectMapper();
write.writeValue(new File("Database//Vehicles.json"), json);

并阅读<代码>。我正在使用的json文件:

VehicleRepository newRepository = mapper.readValue(new File("Database\\Vehicles.json"), VehicleRepository.class);   

这是在上面的一行,错误发生。

这是我的车辆等级:

public class Vehicle {

    private String id;
    private String plate;
    private String manufacturer;
    private String model;
    private String color;

    public Vehicle() {}

    public Vehicle(String plate, String manufacturer, String model, String color) {
        this.id = UUID.randomUUID().toString();
        this.plate = plate;
        this.manufacturer = manufacturer;
        this.model = model;
        this.color = color;
    }

    public Vehicle(String id, String plate, String manufacturer, String model, String color) {
        this.id = id;
        this.plate = plate;
        this.manufacturer = manufacturer;
        this.model = model;
        this.color = color;
    }

    public String getId() {
        return id;
    }

    public String getPlate() {
        return plate;
    }

    public void setPlate(String plate) {
        this.plate = plate;
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

这是我的车载存储课程:

public class VehicleRepository {

    List<Vehicle> vehicles;

    public VehicleRepository() {

    }

    public List<Vehicle> getVehicles() {
        return vehicles;
    }

    public void setVehicles(List<Vehicle> vehicles) {
        this.vehicles = vehicles;
    }
}

有人能帮我吗?

共有1个答案

戈建白
2023-03-14

代码中的问题是您首先将对象转换为String并将该String作为JSON写入文件。

您可以使用以下命令将对象写入文件:

write.writeValue(new File("Vehicles.json"), repository);

结果将是这个正确的json:

{"vehicles":[{"id":"9467d079-4502-4dba-9d23-b8506dfc7ef4","plate":"ghghghhg","manufacturer":"Alfa Romeo","model":"hgghgh","color":"Amarelo"}]}

这可以用您已有的代码完美地阅读:

VehicleRepository newRepository = mapper.readValue(new File("Vehicles.json"), VehicleRepository.class);
 类似资料:
  • 我有以下课 以及以下测试: 我收到以下错误: com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造com.store.domain.model.Cart实例(尽管至少存在一个Creator):无法从[Source:(String)"{"id":"56c7b5f7-115b-4cb9-9658-acb7b849d5d5"}"

  • 在使用JSON库(如Jackson)反序列化时,如果JSON数据与目标类型不匹配,会抛出MismatchedInputException异常。 通过下面的代码可以复现问题。

  • 我正在spring boot应用程序中使用。当我向我的endpoint发送请求时,我会收到以下异常: 我的控制器处理具有以下结构的请求体: 我需要的唯一属性是。我构造了一个类来处理这个对象,如下所示: 我设计了一个像这样的控制器 这个问题的有趣之处在于,如果我将更改为以下结构,我的请求就会得到很好的处理: 我似乎搞不清问题是什么。在这个问题上我很想得到一些帮助。也许有我缺失的注释?我希望其他人也经

  • 我对Jackson有一个错误的理解,就是将json文件反序列化为poco。这是我的代码: 我的POCO命名为AnimalBean: }还有我的JSON文件: } 当我执行我的代码时,我有以下错误:未识别的字段“动物园”(类动画豆),未标记为可忽略的。我知道问题是我的json文件开始不直接由动物,但我不能改变它,因为它不是我的。我已经尝试把对象apper.configure(Deseriazatio

  • 我对Jackson和类型层次结构有以下问题。我正在序列化一个类SubA,该类将扩展为一个字符串,然后尝试将其反序列化回来。当然,在编译时,系统不知道它是基还是SubA,因此我希望它是基,如果它是SubA,则会在编译后执行一些其他操作。 我的基本类看起来像: ...和一个派生自的类: ... 我试图执行以下代码: String是: 但我一次又一次地犯同样的错误。映射器现在知道如何处理另一个类参数-它