У меня есть что-то вроде клиента 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, но это вызовет другое исключение отображения. Есть ли способ сделать это в Джексоне, или мне нужно самому конвертировать из строки в соответствующий класс. Спасибо за любой совет.