Jackson中处理map中的null key 或者null value 及实体字段中的null value
1.map中有null key时的序列化
当有null key时,jackson序列化会报 Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)
处理此异常有两种方式
- 1.需要自定义一个序列化null key的方法
- 2. map中直接remove null key
这里只讨论第一种:
处理方法为 mapper.getSerializerProvider().setNullKeySerializer(new NullKeySerializer()); 将null key处理为空字符
- @Test
- public void testSerializMapNullKey() throws JsonProcessingException {
- //ignore map null value
- Map<String, Object> map = new HashMap<>();
- map.put(null, "test");
- ObjectMapper mapper = new ObjectMapper();
- mapper.getSerializerProvider().setNullKeySerializer(new NullKeySerializer());
- System.out.println(mapper.writeValueAsString(map));
- }
- static class NullKeySerializer extends StdSerializer<Object> {
- public NullKeySerializer() {
- this(null);
- }
- public NullKeySerializer(Class<Object> t) {
- super(t);
- }
- @Override
- public void serialize(Object nullKey, JsonGenerator jsonGenerator, SerializerProvider unused)
- throws IOException, JsonProcessingException {
- jsonGenerator.writeFieldName("");
- }
- }
- {"":"test"}
- Process finished with exit code 0
2. 处理null value的情况
- @Test
- public void testIgnoreMapNullValue() throws JsonProcessingException {
- //ignore null key
- Map<String, Object> map = new HashMap<>();
- map.put("key", "test");
- map.put("key1", null);
- ObjectMapper mapper = new ObjectMapper();
- mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
- System.out.println(mapper.writeValueAsString(map));
- }
输出为:{"key":"test"} 并没有 key1:null
- {"key":"test"}
- Process finished with exit code 0
3. 处理实体中filed中值为null的情况
使用注解:@JsonInclude(JsonInclude.Include.NON_NULL)
注意:@JsonInclude(JsonInclude.Include.NON_NULL)即可以在实体上用,也可以在filed中使用,比如在name上用这个注解
- @Test
- public void testIgnoreNullFiled() throws JsonProcessingException {
- //test ignore null filed
- User user = new User();
- user.setName(null);
- user.setHouse("asdf");
- ObjectMapper mapper = new ObjectMapper();
- System.out.println(mapper.writeValueAsString(user));
- }
- /**
- * ignore null filed
- */
- @JsonInclude(JsonInclude.Include.NON_NULL)
- class User {
- private String name;
- private String house;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getHouse() {
- return house;
- }
- public void setHouse(String house) {
- this.house = house;
- }
- }
输出为:
- {"house":"asdf"}
- Process finished with exit code 0
如果设置全局怎么设置呢,使用: mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
- @Test
- public void testIgnoreNullFiledGlobally() throws JsonProcessingException {
- //test ignore null filed
- User user = new User();
- user.setName(null);
- user.setHouse("asdf");
- ObjectMapper mapper = new ObjectMapper();
- //Ignore Null Fields Globally
- mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
- System.out.println(mapper.writeValueAsString(user));
- }
参考:1.https://www.baeldung.com/jackson-map-null-values-or-null-key
2.https://github.com/eugenp/tutorials/tree/master/jackson-simple
Jackson中处理map中的null key 或者null value 及实体字段中的null value的更多相关文章
- 在论坛中出现的比较难的sql问题:16(取一个字段中的数字)
原文:在论坛中出现的比较难的sql问题:16(取一个字段中的数字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 问题:取一个字段中的数字http://bbs.csdn ...
- foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值
http://zhangxiong0301.iteye.com/blog/2242723 最近有个需求,就是使用mybatis时,向mysql中插入数据,其参数为map类型,map里面的key为列名, ...
- 向数据库中插入一个DateTime类型的数据到一个Date类型的字段中,需要转换类型。TO_DATE('{0}','YYYY-MM-DD'))
需要指出的是,C#中有datetime类型,但是这个类型是包括小时,分钟,秒的.这个格式与数据库中的Date类型不符,如果将now设为datetime类型插入数据会失败. 需要通过TO_DATE('字 ...
- mysql 允许在唯一索引的字段中出现多个null值
线上问题:org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [update fl_table ...
- 程序处理数据库中值字段值为null的查询显示
1.如果你做了一个简单的注册界面,需要用户进行注册,但有些项是不必要填的,当用户完成注册时,数据库表中的相应字段的值会写入null,但如何将查询的字段的值null显示出来? 2.首先我们学习一下如何向 ...
- mysql 中查询一个字段是否为null的sql
查询mysql数据库表中字段为null的记录: select * 表名 where 字段名 is null 查询mysql数据库表中字段不为null的记录: select * 表名 where 字段名 ...
- 当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?
当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出? 问题: orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl ...
- Java中Map根据键值(key)或者值(value)进行排序实现
我们都知道,java中的Map结构是key->value键值对存储的,而且根据Map的特性,同一个Map中 不存在两个Key相同的元素,而value不存在这个限制.换句话说,在同一个Map中Ke ...
- jstl中取map,其中map的key是一个对象,value是一个list
<c:forEach items="${map }" var="item"> //取得key中的属性 ${item.key.name } <c ...
随机推荐
- vue项目报错如下:(Emitted value instead of an instance of Error)
(Emitted value instead of an instance of Error) the "scope" attribute for scoped slots hav ...
- Java初学者作业——使用记事本编写Java程序
返回本章节 返回作业目录 需求说明: 使用记事本编写 Java 程序,输出"大家好!我的梦想是做一名 Java 高级工程师!". 为 Java 程序添加单行和多行注释以及文档注释. ...
- Solr集群安装Version5.5.2(cloud模式)
Solr安装cloud模式,基于Solr的安装版本为5.5.2. 安装规划 Solr IP/机器名 安装软件 运行进程 zdh-7 solr jar zdh-9 solr jar zookeeper ...
- 初识python: for循环之“两数之和”
需求:给定一个数字列表和一个目标值,找出列表中和为目标值的两个数: #!/user/bin env python # author:Simple-Sir # time:20180913 # 给定一个整 ...
- [Flask] Flask问题集(后端模板渲染项目)
1.redirect和render_template的区别? redirect:重定向,会改变url render_template:模板渲染,用模板来渲染当前页,不会改变url 2.关于 'g' 对 ...
- HTTP 408 问题 - Koa body parser
环境描述: 1.nodejs 作为 api 服务器,转发请求给 nginx 2.用 curl 测试,返回 408 找了很久没有找到原因,发现了一篇文章: https://lujunda.cn/2016 ...
- Spark应用的结构的学习
关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新) 承接上一篇文档<Standalone集群搭建和Spark应用监控> 需要了解的概 ...
- HDOJ1573X问题
https://acm.hdu.edu.cn/showproblem.php?pid=1573 n组线性同余方程求解,最后求出多少解.而最终的解的周期为最小公倍数,范围内的,需要这样算.如果最小超过, ...
- 1.linux中的常用命令
本文积累工作中常用到的Linux命令 1. rz -be 文件上传到Linux服务器 此命令执行时,会弹出文件选择对话框,选择好需要上传的文件之后,点确定,就可以开始上传的过程了.上传的速度取决于当时 ...
- 关于CKCsec安全研究院
关于CKCsec安全研究院 CKCsec安全研究院所有文档开源于语雀,会源源不断更新. 部分内容 微信公众号 知识星球 使用需知 由于传播.利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均 ...