JsonMapping异常无法构造实例

时间:2018-01-18 19:48:00

标签: java jackson objectmapper

我有以下课程:

@Data
@NoArgsConstructor
public class FloorPriceData {
  Double multiplicationFactor;
  Double additionFactor;
  Integer heuristicValue;

  public static void main(String[] args) {
    String a = "{\"multiplicationFactor\" : 3, \"additionFactor\" : 1, \"heuristicValue\" : 3}";
    System.out.println(Utils.getMapper().convertValue(a, FloorPriceData.class));
  }
}

当我尝试转换JSON时

{"multiplicationFactor" : 3, "additionFactor" : 1, "heuristicValue" : 3}

到这个类实例我得到以下异常:

  

引起:com.fasterxml.jackson.databind.JsonMappingException:无法构造com.medianet.rtb.mowgli.commons.dto.adexchange.FloorPriceData的实例:no String-argument构造函数/工厂方法从String反序列化value('{“multiplicationFactor”:3,“additionFactor”:1,“heuristicValue”:3}')

1 个答案:

答案 0 :(得分:1)

在这种情况下,您应该使用ObjectMapper.readValue(String json, Class<T> valueType)

System.out.println(Utils.getMapper().readValue(a, FloorPriceData.class));

它将生成一个输出:

FloorPriceData(multiplicationFactor=3.0, additionFactor=1.0, heuristicValue=3)

当您尝试使用

将JSON反序列化为对象时
Utils.getMapper().convertValue(a, FloorPriceData.class)

失败了,因为convertValue首先序列化给定的值,然后再次反序列化它:

  

这相当于首先将给定值序列化为JSON,然后将JSON数据绑定到给定类型的值,但可以在不完全序列化为JSON的情况下执行。

在这种情况下花了:

{"multiplicationFactor" : 3, "additionFactor" : 1, "heuristicValue" : 3}

并将其序列化为:

"{\"multiplicationFactor\" : 3, \"additionFactor\" : 1, \"heuristicValue\" : 3}"