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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...