JSON反序列化为DTO时遇异常,求Map或其他对象接收方案
问题原因与解决方案
核心问题
JSON响应里的content是数组类型(用[]包裹),但你定义的DTO中content字段是Map类型,Jackson无法将数组反序列化为Map,因此抛出类型不匹配异常。
解决方案
方案1:用List<Map<String, Object>>接收数组内容
直接修改DTO的content字段类型,匹配JSON的数组结构,数组中的每个对象用Map存储键值对:
@Data public class OtherResponse { @JsonProperty(value = "content") private List<Map<String, Object>> content; }
反序列化后,你可以通过content.get(0).get("id")、content.get(0).get("reg")等方式获取特定键值对。
方案2:创建实体类接收结构化数据
如果需要更规范、类型安全的处理,可以创建对应content中对象的实体类:
@Data public class ContentItem { private Integer id; private String reg; private String Email; private String Mobile; private String Name; private String Ip; private String Datetime; }
然后修改DTO:
@Data public class OtherResponse { @JsonProperty(value = "content") private List<ContentItem> content; }
这种方式可以直接通过content.get(0).getId()、content.get(0).getReg()等方法获取字段,避免Map的类型转换风险。
补充说明
JSON中{}对应Java的Map或实体类,[]对应Java的List或数组,两者结构不兼容,这是导致反序列化失败的根本原因。根据你的需求选择合适的接收方式即可。
内容的提问来源于stack exchange,提问作者vegeta
相关产品推荐
相关产品推荐

