Jackson MismatchedInputException否要从字符串值反序列化的字符串参数构造函数/工厂方法

问题描述

我有一个示例json:

Object json = "{\"kNown1\":\"m1234\",\"kNown2\":1,\"kNown3\":2,\"unkNown1\":true,\"unkNown2\":15}"

我的Pojo类如下:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class MyPojo implements Serializable {
   private String kNown1;
   private String kNown2;
   private String kNown3;
   
   private Map<String,Object> unkNownFields;

@JsonAnySetter
public void setDynamicAttributes(String key,Object value) {
    if (this.unkNownFields == null) {
        this.unkNownFields = new HashMap<>();
    }
    this.unkNownFields.put(key,value);
}}

以下是代码段:

Object jsonString = "{\"kNown1\":\"m1234\",\"unkNown2\":15}";
    MyPojo poco = new ObjectMapper().**convertValue**(jsonString,MyPojo.class);
    System.out.println(screenInfo);

我正在例外:

Exception in thread "main" java.lang.IllegalArgumentException: Cannot construct instance of `com.model.MyPojo` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{"kNown1":"m1234","kNown2":1,"kNown3":2,"unkNown1":true,"unkNown2":15}')

但是当我使用

Object jsonString = "{\"kNown1\":\"m1234\",\"unkNown2\":15}";
    MyPojo poco = new ObjectMapper().**readValue**(jsonString.toString(),MyPojo.class);
    System.out.println(screenInfo);

我得到了预期的输出,未知字段也填充在unkNownFields映射中。谁能解释我为什么?我也想使其与convertValue一起使用。请帮忙。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)