欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot Jackson 实体String “1“/“0“ 转 JSON true/false

程序员文章站 2024-02-26 20:06:46
...

SpringBoot Jackson 实体String "1"/"0" 转 JSON true/false

背景:

最近重拾ExtJs,使用ExtJs7.2搭建前端项目,后端服务使用SpringBoot+JWT+MP.在使用ExtJs中Grid表格组件的时候发现了checkcolumn相关问题. 后台服务实体类字段属性为String(对应数据库字段类型为char(1) 0/1 两个值 ),前端要求数据必须是boolean类型.

即   数据库 char(1) ==> 实体类 String ==> 前端 boolean;

讲述一下我的解决方法:

思路: 问题关键在于

a) 实体类 转化 JSON字符串 '1'/'0' ==> true/false    后端服务传输数据到前端(前端数据加载读取)

b) JSON字符串 解析 为实体类 true/false==>'1'/'0'   前端发送数据到后台服务(前端数据修改保存)

考虑使用 @JsonSerialize @JsonDeserialize 这两个注解实现字段的自动转化与解析

 解决方案:

  • 首先数据库字段类型:

SpringBoot Jackson 实体String “1“/“0“ 转 JSON true/false

 字段名: enabled ,类型 char,长度 1, 默认值 '1'==>  '1':启用;'0':禁用

  • 实体类:
@JsonSerialize(using = NumericBooleanSerializer.class)
@JsonDeserialize(using = BooleanNumericDeserializer.class)
private String enabled;
  •  转化类
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

public class NumericBooleanSerializer extends JsonSerializer<String> {

    @Override
    public void serialize(String b, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeBoolean(b.equals("1"));
    }
}
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;

public class BooleanNumericDeserializer extends JsonDeserializer<String> {

    @Override
    public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {

        return Boolean.valueOf(jp.getText()) ? "1" : "0";
    }
}

名字起的有点问题,因为以开始是Integer类型转true/false,后来修改为String类型.

看下最终效果:

加载时:

SpringBoot Jackson 实体String “1“/“0“ 转 JSON true/false

修改时:

SpringBoot Jackson 实体String “1“/“0“ 转 JSON true/false

 小结: 本编博客只是提供了一种方法一种思路.当然方法有很多,新定义JacksonConfiguation也可以.