我在尝试使用Jackson 2.9.4解析应用中的对象时遇到问题
@JsonInclude(JsonInclude.Include.NON_NULL)
public class EsQuery {
@JsonProperty("_source")
@JsonSerialize(keyUsing = MapSerializer.class)
private final Map<String,List<String>> fields;
@JsonProperty
private final Map<String, Object> aggs;
@JsonProperty
private final Map<String, Object> query;
@JsonCreator
public EsQuery(@JsonProperty("_source") Map<String,List<String>> fields, @JsonProperty("aggs") Map<String, Object> aggs, @JsonProperty("query")
Map<String, Object> query) {
this.fields = (MapUtils.isEmpty(fields) ? null : fields);
this.aggs = (MapUtils.isEmpty(aggs) ? null : aggs);
this.query = (MapUtils.isEmpty(query) ? null : query);
}
}
基本上,我试图从这个json序列化一个EsQuery实例:
{
"_source": {},
"query": {
"bool": {
"should": [],
"filter": []
}
},
"aggs": {}
}
这个错误就是这个错误:
Caused by: java.lang.IllegalArgumentException: Class com.fasterxml.jackson.databind.ser.std.MapSerializer has no default (no arg) constructor
at com.fasterxml.jackson.databind.util.ClassUtil.createInstance(ClassUtil.java:553)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializerInstance(DefaultSerializerProvider.java:135)
有什么想法吗?显然,如果我查看课程MapSerializer,它就没有任何默认构造函数。