1. jsonToBean时,json中有的字段,bean中没有 无法匹配时,忽略此字段,不抛出异常(默认是抛出异常的) 方案一(局部):在class上加 @JsonIgnoreProperties(ignoreUnknown = true) public class tes 方案二(局部或全局)或者代码控制 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.readValue(json,cls);
================================================= 2020-06-11 =====================补充
今日又遇到这个错误,没想到3年前 我就研究过 呵呵 厉害了 我自己!!!!
首先看demo:
public class TestMain { public static void main(String[] args) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); /* 1.把一个实体类转换成一个Json 是完全没有问题的,通常不会报错 */ UserBase userBase = new UserBase(); userBase.setUserName("小李飞刀"); userBase.setAge(18); userBase.setAddTime(new Date()); String json = objectMapper.writeValueAsString(userBase); System.out.println(json);//{"userName":"小李飞刀","age":18,"addTime":1591851786568} /* 2.若是把一个json转换成实体类,那么这步可能会报错,首先我们测试 json里字段不全缺失的情况 缺少addTime字段,你可能已经猜到缺少字段不会引起什么问题。因为 objectMapper.read是 读json的,一个字段一个字段的读,你缺少自然没有问题 */ String json1 = "{\"userName\":\"小李飞刀\",\"age\":18}"; UserBase userBase1 = objectMapper.readValue(json1, UserBase.class); System.out.println(objectMapper.writeValueAsString(userBase1));//{"userName":"小李飞刀","age":18,"addTime":null} /* 3.缺少没有问题,但是若是 json 中有某一个字段,而实体类中没有这个字段,就意味着找不到,他的逻辑是json中读一个字段,然后去 实体类中寻找这个字段,若找不到就会抛出异常。以下是举例 */ String json2 = "{\"userName\":\"小李飞刀\",\"age88\":18}";//把age换成age88 UserBase userBase2 = objectMapper.readValue(json2, UserBase.class); System.out.println(objectMapper.writeValueAsString(userBase2));//这一步就会抛出异常了。 //2种解决方法 都可以。 } }
其实这2种方法 都一般,可以看情况使用,尽量不用,没有必要。主要是要看使用场景。我们用的最多的就是在SpringBoot项目中, HTTP请求 content-type:application/json,时的请求体的Bean类,
因为有些接口的参数,经常发生变化,如增加参数或减少参数,增加参数还好,尤其是减少参数,那么若不忽略掉这个错误,就不行。举例:
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/6640865.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2016-03-29 关于数据结构的赋值,最好不要直接赋值,而是采用构造函数、或其它函数来赋值,这样可以方便控制---我自己!