![](/img/trans.png)
[英]com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of : poja class no suitable constructor found
[英]com.fasterxml.jackson.databind.JsonMappingException not able to construct instance of class
import javax.ws.rs.core.Response;
class A{
@JsonProperty("B")
List<B> b;
@JsonProperty("abc")
String abc;
}
public abstract class B{
@JsonProperty("def")
String def;
}
public class C extends B{
@JsonProperty("xyz")
String xyz;
}
json:
{
"B": [
{
"def": "<text1>"
},
{
"def": "<text1>",
"xyz": "<text2>"
}
],
"abc": "<text3>"
}
響應具有上述json
內容
A a = response.readEntity(A.class);
錯誤:
javax.ws.rs.client.ResponseProcessingException:` Problem with reading the data, class A, ContentType: application/json.
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of B: abstract types either need to be mapped
有什么辦法可以創建一個包含抽象類對象的類實例?
因為類B
是一個abstract
class
您需要提供可用於實例化B
類型的類型。 在您的情況下是C
類。 您可以通過以下方式指示Jackson
這樣做:
@JsonDeserialize(as = C.class)
abstract class B {
或在現場級別:
@JsonProperty("B")
@JsonDeserialize(contentAs = C.class)
private List<B> b;
這將包括類名作為 JSON 屬性“類”。
@JsonTypeInfo(use=Id.CLASS, include=As.PROPERTY, property="class")
public abstract class B {
}
public class C extends B {
public int x;
}
public class D extends B {
public String name;
}
public class A {
public List<B> items;
}
and this could result in serialized JSON like:
{ "items" : [
{ "class":"D", "name":"TXT" },
{ "class":"C", "x":123 }
]}
類似的邏輯可用於上述問題,因為我們需要在 JSON 中add some additional info
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.