@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 startprivate Boolean end这两个字段一直无法序列化

总结排查思路如下:

  1. 是boolean还是Boolean,到底是基本数据类型还是包装类,如果是基本数据类型的话(包装类可以使用,但是不推荐),不要使用is开头。我们可以看看阿里巴巴规范中的这段话

    1. 【强制】POJO类中的任何布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。

    反例:定义为基本数据类型 boolean isSuccess;的属性,它的方法也是 isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异常。

  2. 这个错误也是我犯的错误,我复写了get方法,方法的访问权限被设置成了private级别

    解决方案:

    • 加注解,@JsonProperty(“isEnd”)
    • 将方法级别更正为public

记一次jackson序列化Boolean的坑的更多相关文章

  1. Jackson序列化和反序列化Json数据完整示例

    Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...

  2. 源码分析springboot自定义jackson序列化,默认null值个性化处理返回值

    最近项目要实现一种需求,对于后端返回给前端的json格式的一种规范,不允许缺少字段和字段值都为null,所以琢磨了一下如何进行将springboot的Jackson序列化自定义一下,先看看如何实现,再 ...

  3. 记录Jackson和Lombok的坑

    记录Jackson和Lombok的坑 今天遇到Jackson反序列化json缺少了字段,后来研究下发现是Jackson的机制和Lombok生成的setter不一致,导致没有正确调用setter. 复现 ...

  4. jackson处理boolean类型的注意点

    在使用jackson处理boolean类型的时候,比如你的java bean有一个boolean类型的字段:isTitle, 默认把这个Java bean 转换为json的时候,这个字段就变成了tit ...

  5. spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  6. Jackson序列化实例

    参考文章 Jackson使用ContextualSerializer在序列化时获取字段注解的属性 使用BeanSerializerModifier定制jackson的自定义序列化(null值的处理) ...

  7. 记一次 Spring 事务配置踩坑记

    记一次 Spring 事务配置踩坑记 问题描述:(SpringBoot + MyBatisPlus) 业务逻辑伪代码如下.理论上,插入数据 t1 后,xxService.getXxx() 方法的查询条 ...

  8. 记一次RabbitMq 安装和配置坑

    记一次RabbitMq 安装和配置坑 正常情况下安装 先安装erl ,在安装rabbitmq 这个在windows下的安装没什么技巧,按照默认一路下一步就ok.安装好后可以到cmd测试是否安装好. 测 ...

  9. Jackson序列化和反序列化

    1,下载Jackson工具包(jackson-core-2.2.3.jar  jackson-annotations-2.2.3.jar  jackson-databind-2.2.3.jar ) j ...

随机推荐

  1. 【Java】Array 数组

    概述 数组是多个相同数据类型按一定顺序排列的一组数据 特点: - 数据类型相同!! - 长度固定!! 构成数组的几个要素 - 数组名称 - 下标,又称索引 - 元素 - 数组长度 数组是一种引用类型, ...

  2. phoenix 索引实践

    准备工作 创建测试表 CREATE TABLE my_table ( rowkey VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR, v2 VARCHAR, v3 V ...

  3. 猜数字和飞机大战(Python零基础入门)

    前言 最近有很多零基础初学者问我,有没有适合零基础学习案例,毕竟零基础入门的知识点是非常的枯燥乏味的,如果没有实现效果展示出来,感觉学习起来特别的累,今天就给大家介绍两个零基础入门的基础案例:猜数字游 ...

  4. 架构师修炼之微服务部署 - Docker简介

    Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是 ...

  5. 视频+图文 String类干货向总结

    目录 一.字符串的介绍及视频讲解 二.字符串的两种创建方式 方法一:通过new创建 方法二:直接创建 三.字符串的长度获取:length()方法 四.使用 == 和equals()方法比较两个字符串 ...

  6. CSS- 一些少用的

    1. 字体间距 1.)word-spacing: 2.)letter-spacing: 3.)text-indent 4.)text-align-last: justify; 和 text-align ...

  7. Vue自定义指令 数据传递

    在项目开发过程中,难免会遇到各种功能需要使用Vue自定义指令--directive 去实现 .关于directive的使用方式这里就不做过多的介绍了,Vue官方文档中说的还是听明白的.今天讲讲在使用V ...

  8. CSS中“~”(波浪号)、“,”(逗号)、“+”(加号)、“>”(大于号)、“ ”(空格)详解

    “~”:$('pre ~ brother')表示获取pre节点的后面的所有兄弟节点,相当于nextAll()方法: “+”:$('pre + nextbrother')表示获得pre节点的下一个兄弟节 ...

  9. thinkphp5和nginx不得不说的故事

    由于之前学习用的都是apsche,所以对ngnix一窍不通,在这里写给正在学习的同行,希望可以帮助到你们: 如果你不会用apache部署tp5的可以查看我之前发布的文章,里面有提到 phpstudy ...

  10. 微信jssdk遇到的一些问题汇总

    1.用户手动去触发的接口可以直接调用比如wx.startRecord(); 但是写在页面加载完成里就无效,需要写在 wx.ready(function(){ wx.startRecord(); }); ...