MismatchedInputException: невозможно создать экземпляр `java.util.LinkedHashMap` - PullRequest
1 голос
/ 30 мая 2019

Я пытался отобразить LinkedHashMap в JSON в моем kotlin тестовом примере.пока я конвертирую json в object с использованием jackson-objectmapper, у меня возникла проблема ниже. Пожалуйста, помогите мне решить эту проблему.

construct instance of java.util.LinkedHashMap (although at least one 
Creator exists): no String-argument constructor/factory method to 
deserialize from String value ('{e123f1dd-6c54-4b01-90e6- 
d701748f0851=class MyClass {

Мой Kotlin тестовый пример ниже

fun `testcase success`() {

val mapId = UUID.fromString("e123f1dd-6c54-4b01-90e6-d701748f0851");
  val Idno = UUID.randomUUID();

  val order = MyClass();

  val map : LinkedHashMap<String, MyClass> = LinkedHashMap();

  order.collectiveSignature=true
  order.docId="5436576"
  order.status=OnboardOrderPoaStatusTPL.NOT_SIGNED
  order.createdAt=createdDate
  order.updatedAt=updatedDate
  order.portingAt=OffsetDateTime.parse("2018-09-21T14:22:24.682+02:00");
  order.fastPorting=true
  order.owner=MyAnotherClass();
  order.owner.company="test"
  order.owner.firstName="test"
  order.owner.lastName="test"
  order.owner.city="test"
  order.owner.zip="5436"
  order.owner.street="test"
  order.owner.house="test"


  map["e123f1dd-6c54-4b01-90e6-d701748f0851"] = order;

  val body = """{

          "mapId": "$mapId",
          "Idno": "$Idno",
          "name": "Abishek",
          "poas":"$map"

         }""".trimIndent()

  val mapper = ObjectMapper()
  mapper.findAndRegisterModules()

  mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
  mapper.configure(DeserializationFeature.EAGER_DESERIALIZER_FETCH, false);


  val input = mapper.readValue<MainClass>(body)


}

1 Ответ

1 голос
/ 30 мая 2019

Проблема в том, что poas значение содержит строковое представление Map, которое содержит строковое представление MyClass.Действительно, вместо создания Json представления, которое вы назвали MyClass.toString(), и целью toString является показ отладочной информации.

Как это исправить?

Используя ObjectMapper вы должны преобразовать Map в json вместо toString()

  val body = """{

          "mapId": "$mapId",
          "Idno": "$Idno",
          "name": "Abishek",
          "poas": "${mapper.writeValue(map)}"

         }""".trimIndent()

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