Jackson Mixin +创作者无法正常工作

时间:2016-12-19 20:00:27

标签: java jackson

我需要覆盖/修复第三方类(google maps类)的序列化机制,以便我可以从磁盘上的文件封送对象。我已经看到several examples我正在尝试做什么,但它们似乎都没有用。

陷入困境的班级:

public class LatLng implements UrlValue {
    public double lat;
    public double lng;

    public LatLng(double lat, double lng) {
        this.lat = lat;
        this.lng = lng;
    }
}

我的混音

public abstract class LatLnMixIn {
    @JsonCreator
    public LatLnMixIn(@JsonProperty("lat") Double lat, @JsonProperty("lng ")Double lng) {}
}

我的用法

 ObjectMapper mapper = new ObjectMapper().addMixIn(LatLng.class, LatLnMixIn.class);
    InputStream mockStream = this.getClass().getResourceAsStream("/mz-to-nordstrom-rack-snoq.json");
    DirectionsResult mockResult = mapper.readValue(mockStream, DirectionsResult.class);

要编组的json片段:

      "start_location" : {
        "lat" : 47.5985728,
        "lng" : -122.3315845
      },

我的错误(有/没有mixin)

  

com.fasterxml.jackson.databind.JsonMappingException:不合适   为类型[simple type,class。]找到的构造函数   com.google.maps.model.LatLng]:无法从JSON对象实例化   (缺少默认构造函数或创建者,或者可能需要添加/启用   类型信息?)

有谁看到我可能出错的地方?

1 个答案:

答案 0 :(得分:2)

Mixins使用匹配的构造函数和方法签名。您的目标类构造函数看起来像

public LatLng(double lat, double lng)

,而mixin构造函数定义为

public LatLnMixIn(Double lat, Double lng)

杰克逊认为doubleDouble是不同的类型,因此在目标类中找不到匹配的构造函数。

只需更改构造函数即可使用double个参数。

此特定示例中不需要@JsonCreator注释。