我有一节课:
@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:的实例-参数构造函数/工厂方法从字符串值反序列化({“multiplicationFactor”:3,"additionFactor“:1,"heuristicValue”:3})
发布于 2018-01-18 19:54:35
在这种情况下,您应该使用ObjectMapper.readValue(String json, Class 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}"https://stackoverflow.com/questions/48329206
复制相似问题