MismatchedInputException - Джексон десериализовать - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь прочитать мой .json файл. Это класс VehicleRepository.

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

Это ошибка:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Невозможно создать экземпляр VehicleRepository (хотя существует хотя бы один Создатель): Невозможно создать экземпляр VehicleRepository (хотя существует хотя бы один Создатель): нет String- метод конструктора аргумента / фабрики для десериализации из значения String в [Source: (File); строка: 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);   

И в приведенной выше строке возникает ошибка.

Это мой Vehicle класс:

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

А это мой VehicleRepository класс:

public class VehicleRepository {

    List<Vehicle> vehicles;

    public VehicleRepository() {

    }

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

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

Может кто-нибудь мне помочь?

1 Ответ

1 голос
/ 29 апреля 2019

Проблема в вашем коде заключается в том, что вы сначала конвертируете объект в строку и записываете эту строку как 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...