如何使用jackson正确序列化地图并使json strcuture不是Map时失败?

时间:2018-02-16 22:33:58

标签: java json jackson

我在尝试使用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,它就没有任何默认构造函数。

0 个答案:

没有答案