Почему я получаю ошибку синтаксического анализа Jackson ObjectMapper из-за некоторых проблем при запуске LinkedHashMap? - PullRequest
0 голосов
/ 09 сентября 2018

Я хочу прочитать этот JSON, используя ObjectMapper:

{
  "basePath": "/v1",
  "models": {
    "Course":{
      "number": "integer",
      "name": "string",
      "description": "string"
    },
    "Department": {
      "name": "string",
      "code": "string"
    }
  }
}

Я использовал Jackson ObjectMapper следующим образом:

ObjectMapper mapper = new ObjectMapper();
InputStream inputStream = Input.class.getResourceAsStream("/input.json");
Input input = mapper.readValue(inputStream, Input.class);

Где ввод:

public class Input {

  String basePath;
  Map<String, Map<String, Map<String, String>>> models;

  public String getBasePath() {
    return basePath;
  }

  public void setBasePath(String basePath) {
    this.basePath = basePath;
  }

  public Map<String, Map<String, Map<String, String>>> getModels() {
    return models;
  }

  public void setModels(Map<String, Map<String, Map<String, String>>> models) {
    this.models = models;
  }
}

Но я получаю JSON Mapping Error.

Can not instantiate value of type [map type; class java.util.LinkedHashMap, [simple type, class java.lang.String] -> [simple type, class java.lang.String]] from JSON String; no single-String constructor/factory method

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 09 сентября 2018

Предоставленная структура json не соответствует структуре карты моделей. У вас есть два варианта: либо изменить карту, либо изменить json.

Map<String, Map<String, String>> models;

Если изменить структуру JSON, как показано ниже.

{
  "basePath": "/v1",
  "models": {
    "Course":{
      "Details":{
      "number": "integer",
      "name": "string",
      "description": "string"
      }
      }
    }

  }

Я думаю, что лучше изменить в Map, а не JSON структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...