Я пытаюсь десериализовать объект JSON-RPC с Джексоном. Формат JSON-RPC:
{"result": "что-то", "error": null, "id": 1}
В моем случае свойство результата является универсальным объектом.
У меня есть класс для десериализации ответа:
public class JsonRpcResponse {
private Object result;
private JsonRpcError error;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public JsonRpcError getError() {
return error;
}
public void setError(JsonRpcError error) {
this.error = error;
}
public Object getResult() {
return result;
}
public void setResult(Object result) {
this.result = result;
}
}
Я могу получить объект ответа с помощью:
JsonRpcResponse jsonResp = mapper.readValue(response, JsonRpcResponse.class);
Я хочу иметь универсальный метод, который десериализует этот объект результата, передавая методу тип объекта (или класса, если вы хотите), в который будет производиться десериализация. Таким образом, я могу передать любой тип объекта в зависимости от ожидаемого ответа.
Например, у меня есть этот класс с двумя свойствами:
public class JsonEventProperties {
private String conditon;
private String usage;
public JsonEventProperties(String condition, String usage) {
this.conditon = condition;
this.usage = usage;
}
public JsonEventProperties() {
throw new UnsupportedOperationException("Not yet implemented");
}
public String getConditon() {
return conditon;
}
public void setConditon(String conditon) {
this.conditon = conditon;
}
public String getUsage() {
return usage;
}
public void setUsage(String usage) {
this.usage = usage;
}
}
Объект результата внутри ответа для приведенного выше случая будет:
"result": {"condition":"test","usage":"optional"}
Я пытался:
mapper.readValue(result,objectClass)
где result - это экземпляр JsonNode результата (который по какой-то причине является LinkedHashMap) и objectClass - класс, к которому я хочу десериализоваться. Но это не работает.
Я весь день ломал голову над разными способами, но, вероятно, я не понимаю, кто работает Джексон.
Может кто-нибудь помочь мне с этим?
Заранее спасибо.