记一次jackson序列化Boolean的坑

简介: 记一次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这两个字段一直无法序列化


总结排查思路如下:


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


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

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


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


解决方案:


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



相关文章
|
4月前
|
JSON Java API
jackson序列化和反序列化中的注解和扩展点大全【收藏】
jackson序列化和反序列化中的注解和扩展点大全【收藏】
|
4月前
|
NoSQL Redis
redis使用jackson序列化数据配置文件
redis使用jackson序列化数据配置文件
112 5
|
4月前
|
Java
springboot解决jackson序列化Long类型精度失效问题
springboot解决jackson序列化Long类型精度失效问题
121 0
|
5月前
|
JSON Java Maven
使用Jackson进行 JSON 序列化和反序列化
使用Jackson进行 JSON 序列化和反序列化
112 0
|
10月前
|
前端开发 数据库
jackson序列化时区问题
jackson序列化时区问题
195 1
jackson序列化时区问题
|
缓存 NoSQL Java
最详细 | redis实战:JackSon/FastJson方式序列化深度解析
Jackson2JsonRedisSerializer和FastJsonRedisSerializer的实战应用
3154 0
|
JSON Java 数据格式
Jackson对象 ObjectMapper实现序列化数据为json
Jackson对象 ObjectMapper实现序列化数据为json
|
JSON 前端开发 Java
【工作中问题解决实践 七】SpringBoot集成Jackson进行对象序列化和反序列化
【工作中问题解决实践 七】SpringBoot集成Jackson进行对象序列化和反序列化
408 0
|
JSON Java 数据格式
Java:jackson处理LocalDateTime序列化的时候报错InvalidDefinitionException
Java:jackson处理LocalDateTime序列化的时候报错InvalidDefinitionException
1013 0
|
Dubbo Java 应用服务中间件
再谈序列化之rpc调用失败和jackson序列化时不允许Map中的key为null
再谈序列化之rpc调用失败和jackson序列化时不允许Map中的key为null
225 0