我有以下课程:
@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}')
答案 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}"