у меня что-то вроде клиента JSON-RPC, и у меня возникли проблемы с десериализацией
входящая строка json в мой объект java.
Входящий формат JSON:
{"value":"xxxx","type":"xxxx"}
Объект, к которому я хочу десериализоваться:
@JsonAutoDetect
@JsonDeserialize()
public class ReturnValue {
private Object value;
private String type;
@JsonCreator
public ReturnValue(@JsonProperty("value") String val, @JsonProperty("type") String type) {
value = val;
this.type = type;
}
...getters, setters...
Кажется, это работает нормально, если значение равно String, но если оно имеет тип массива, оно выдает
Исключение JsonMapping - не удается десериализовать экземпляр java.lang.String из маркера START_ARRAY
для JSON, как это:
{\"value\":[8, 10], \"type\":\"[int]\"}
Код:
int[] arr = (int[])getReturnValue(jsonString).getValue();
Где getReturnValue ничего особенного:
ObjectMapper om = new ObjectMapper();
ReturnValue rv = null;
rv = om.readValue(json, ReturnValue.class);
return rv;
Другая проблема состоит в том, что я хотел бы, чтобы свойство type было типа Class, но это
еще одно исключение картографирования. Есть ли способ в Джексоне, чтобы сделать это, или я должен конвертировать из строки в соответствующий класс сам. Спасибо за любой совет.