记一次jackson序列化Boolean的坑
@Data
public class CouponTemplateDto {
/**
* 优惠券类型id
*/
private Long couponTypeId;
/**
* 优惠券模板id
*/
private Long couponTemplateId;
/**
* 用户id
*/
private Long userId;
/**
* 优惠券描述
*/
private String description;
/**
* 面值,满200减30,则此值为30
*/
private BigDecimal value;
/**
* 从次日起,多少天可用
*/
private Integer delayDays;
/**
* 从当日起,多少天可用
*/
private Integer nowDays;
/**
* 满多少可以减,满200减30,则此值为200
*/
private BigDecimal fullAmount;
/**
* 券号
*/
private String couponNo;
/**
* 有效起始日期
*/
private Date startTime;
/**
* 失效日期
*/
private Date endTime;
/**
* 创建时间
*/
private Date createTime;
/**
* 使用日期
*/
private Date useTime;
/**
* 券使用状态:0-未使用 1-已使用 2-已过期
*/
private Integer couponUseStatus;
/**
* 过期前多少天提醒,默认7天
*/
private Integer overDueRemind;
/**
* 优惠券标题
*/
private String title;
/**
* 优惠券是否能开始使用
*/
// @JsonProperty("isStart")
private Boolean start;
/**
* 优惠券是否过期
*/
// @JsonProperty("isEnd")
private Boolean end;
private Boolean getStart() {
return startTime.before(new Date());
}
private Boolean getEnd() {
return endTime.before(new Date());
}
}
我定义了一个这样的类,我们项目用的是Spring Boot,默认底层采用的是jackson序列化,但是在使用中出了一个问题private Boolean start跟private Boolean end这两个字段一直无法序列化
总结排查思路如下:
是boolean还是Boolean,到底是基本数据类型还是包装类,如果是基本数据类型的话(包装类可以使用,但是不推荐),不要使用is开头。我们可以看看阿里巴巴规范中的这段话
- 【强制】POJO类中的任何布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型 boolean isSuccess;的属性,它的方法也是 isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异常。
这个错误也是我犯的错误,我复写了get方法,方法的访问权限被设置成了private级别
解决方案:
- 加注解,@JsonProperty(“isEnd”)
- 将方法级别更正为public
记一次jackson序列化Boolean的坑的更多相关文章
- Jackson序列化和反序列化Json数据完整示例
Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...
- 源码分析springboot自定义jackson序列化,默认null值个性化处理返回值
最近项目要实现一种需求,对于后端返回给前端的json格式的一种规范,不允许缺少字段和字段值都为null,所以琢磨了一下如何进行将springboot的Jackson序列化自定义一下,先看看如何实现,再 ...
- 记录Jackson和Lombok的坑
记录Jackson和Lombok的坑 今天遇到Jackson反序列化json缺少了字段,后来研究下发现是Jackson的机制和Lombok生成的setter不一致,导致没有正确调用setter. 复现 ...
- jackson处理boolean类型的注意点
在使用jackson处理boolean类型的时候,比如你的java bean有一个boolean类型的字段:isTitle, 默认把这个Java bean 转换为json的时候,这个字段就变成了tit ...
- spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- Jackson序列化实例
参考文章 Jackson使用ContextualSerializer在序列化时获取字段注解的属性 使用BeanSerializerModifier定制jackson的自定义序列化(null值的处理) ...
- 记一次 Spring 事务配置踩坑记
记一次 Spring 事务配置踩坑记 问题描述:(SpringBoot + MyBatisPlus) 业务逻辑伪代码如下.理论上,插入数据 t1 后,xxService.getXxx() 方法的查询条 ...
- 记一次RabbitMq 安装和配置坑
记一次RabbitMq 安装和配置坑 正常情况下安装 先安装erl ,在安装rabbitmq 这个在windows下的安装没什么技巧,按照默认一路下一步就ok.安装好后可以到cmd测试是否安装好. 测 ...
- Jackson序列化和反序列化
1,下载Jackson工具包(jackson-core-2.2.3.jar jackson-annotations-2.2.3.jar jackson-databind-2.2.3.jar ) j ...
随机推荐
- Word文档创建目录
一.以设置两级目录为例: 1.设置两个标题,标题1对应第一级目录,标题2对应第二级目录. 点击标题1,点击修改: 设置好样式和格式: 同理设置标题2. 2.创建多级目录: 选择级别1,关联到标题1,设 ...
- yzmsb_test.py
识别诺诺金服页面的验证码,并自动登录到后台. #导包 from selenium import webdriver from PIL import Image, ImageDraw from time ...
- 详解 Lambda表达式
Lambda表达式 概述: Lambda 是一个匿名函数, 我们可以把 Lambda表达式理解为是一段可以传递的代码 (将代码像数据一样进行传递) 可以写出更简洁.更灵活的代码. 作为一种更紧凑的代码 ...
- [PHP] 获取IP 和JS获取IP和地址
通过js获取 服务器 ip 服务器端口 服务器地址 var address=window.location.href; thisDLoc = document.location; var hostpo ...
- Spring5:控制反转
二.Spring IOC控制反转 1:IOC推导 >传统业务调用编程 定义一个userDao接口:UserDao package com.spring; public interface Use ...
- pytorch 矩阵数据增加维度unsqueeze和降低维度squeeze
增加一个维度 out.unsqueeze(-1) 降低一个维度 out.squeeze(dim=1)
- 聊聊JavaScript在工作中常用的方法(一)
一.字符串转数组(split方法) 废话少说,直接上代码: //例子1 var str="abc,def,ghi"; var strArray=str.split(",& ...
- css3--:target选择器称为目标选择器
:target选择器称为目标选择器,用来匹配文档(页面)的url的某个标志符的目标元素.我们先来上个例子,然后再做分析. 示例展示 点击链接显示隐藏的段落. HTML代码: <h2>< ...
- PSD转HTML
随着时间的推移,技术的进步,越来越多的人也越来越熟悉HTML和CSS以及不同的技术来将 Photoshop 设计转换成 HTML 或 CSS 格式.对于一个设计师或网页开发人员,知道如何将PSD文件转 ...
- Ubuntu 安装 Qt, 安装辅助软件
sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev sudo apt-get install gcc g++ sudo apt-get inst ...