Не удалось прочитать JSON: невозможно создать экземпляр `java.util.LinkedHashMap` - PullRequest
0 голосов
/ 04 ноября 2018

Если я получу, получим неуверенные строки данных JSON. Как мне установить мой класс?

Это мой текущий класс

public class ChatMessage {

private Map<String, String> message = new HashMap<>();

@JsonAnyGetter
public Map<String, String> any(){
    return this.message;
}

public Map<String, String> getMessage() {
    return this.message;
}

@JsonAnySetter
public void setMessage(String key, String value) {
    message.put(key, value);
}

@Override
public String toString() {
    return "Message [message=" + message + "]";
}
}

это мой JSON от JS

{"type":"message","user":"james","to":"","message":"Hi every"}

Я получил ошибку сейчас

org.springframework.messaging.converter.MessageConversionException: Could not 
read JSON: Cannot construct instance of `java.util.LinkedHashMap` (although 
at least one Creator exists): no String-argument constructor/factory method 
to deserialize from String value ('Welcome james join the room')
at [Source: (byte[])" . 
{"type":"message","user":"james","to":"","message":"Welcome james join the 
room"}"; line: 1, column: 52] (through reference chain: 
chat.model.ChatMessage["message"]); nested exception is         
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct         
instance of `java.util.LinkedHashMap` (although at least one Creator exists): 
no String-argument constructor/factory method to deserialize from String 
value ('Welcome james join the room')
at [Source: (byte[])" . 
{"type":"message","user":"james","to":"","message":"Welcome james join the 
room"}"; line: 1, column: 52] (through reference chain: 
chat.model.ChatMessage["message"])

потому что мой JSON будет похож на

{"type":"message",
 "user":"james",
 "to":"",
 "message":"Welcome james join the room",
 "xxx":"xxxxxxxxxxxxx"}

или

{"type":"message",
 "user":"james",
 "to":"",
 "message":"Welcome james join the room",
 "yyy":"xxxxxxxxxxxxx"}

как мне установить мой класс? Thx

1 Ответ

0 голосов
/ 04 ноября 2018

Переименуйте либо поле message в поле json, либо message в POJO. Согласно вашей структуре POJO, Джексон пытается десериализовать "message":"Hi every" в поле сообщения в вашем POJO и не может создать карту из него (так как это просто строка).

Ваш код будет работать со следующими json:

{"type":"message","user":"james","to":"","json-message":"Hi every"}

OR

следующий POJO:

public class ChatMessage {

private Map<String, String> map = new HashMap<>();

@JsonAnyGetter
public Map<String, String> any(){
    return this.map;
}

public Map<String, String> getMap() {
    return this.map;
}

@JsonAnySetter
public void setMap(String key, String value) {
    map.put(key, value);
}

@Override
public String toString() {
    return "Map [map=" + map + "]";
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...