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 这两个注解实现字段的自动转化与解析
解决方案:
- 首先数据库字段类型:
字段名: 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类型.
看下最终效果:
加载时:
修改时:
小结: 本编博客只是提供了一种方法一种思路.当然方法有很多,新定义JacksonConfiguation也可以.
上一篇: 一个可以防止刷新的JSP计数器