前言
在前后端分离开发模式下,接口规范统一处理Boolean类型,需要转成0和1,使用SpringBoot + fastjson全局统一配置,具体配置如下
配置自定义序列化规则
自定义序列化
自定义
BooleanToIntegerSerializer实现ObjectSerializer接口方法 ```shell package com.jyusun.origin.common.config.fastjson;
import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.ObjectSerializer; import com.alibaba.fastjson.serializer.SerializeWriter; import com.jyusun.origin.common.util.ObjectUtil;
import java.io.IOException; import java.lang.reflect.Type;
/**
- 布尔类型序列化 false=0,true=1
- 作用描述: *
- @author jyusun
- @date 2021/12/1 15:50
- @since 1.0.0 */ public class BooleanToIntegerSerializer implements ObjectSerializer {
@Overridepublic void write(JSONSerializer jsonSerializer, Object object, Object o1, Type type, int i) throws IOException {SerializeWriter out = jsonSerializer.getWriter();int value;if (ObjectUtil.isEmpty(object)) {value = 0;} else {value = Boolean.parseBoolean(String.valueOf(object)) ? 1 : 0;}out.writeInt(value);}
}
<a name="rUyUt"></a>### 方式一:FastJsonConfiguration- 配置自定义的序列化代码`fastJsonConfig.getSerializeConfig().put(Boolean.class, new BooleanToIntegerSerializer());````shellpackage com.jyusun.origin.basic.common.config.fastjson;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.parser.ParserConfig;import com.alibaba.fastjson.serializer.SerializerFeature;import com.alibaba.fastjson.support.config.FastJsonConfig;import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;import com.clamc.common.util.DateUtil;import com.google.common.collect.Lists;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.MediaType;import java.nio.charset.Charset;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.util.ArrayList;import java.util.List;/*** FastJson 配置类** @author jyusun* @since 1.0.0*/@Configuration@ConditionalOnClass(JSON.class)@ConditionalOnMissingBean(FastJsonHttpMessageConverter.class)@ConditionalOnWebApplicationpublic class FastJsonConfiguration {@Beanpublic FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();converter.setFastJsonConfig(fastJsonConfig());converter.setSupportedMediaTypes(getSupportedMediaType());ParserConfig.getGlobalInstance().setAutoTypeSupport(true);return converter;}/*** fastJson的配置*/private FastJsonConfig fastJsonConfig() {FastJsonConfig fastJsonConfig = new FastJsonConfig();fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,// Map 默认值SerializerFeature.WriteMapNullValue,// 数组 默认 空数组SerializerFeature.WriteNullListAsEmpty,// 数值类型 默认为 0SerializerFeature.WriteNullNumberAsZero,// Boolean 默认为 falseSerializerFeature.WriteNullBooleanAsFalse,SerializerFeature.WriteDateUseDateFormat,// 消除循环引用SerializerFeature.DisableCircularReferenceDetect,// 字段名称排序后输出SerializerFeature.SortField);fastJsonConfig.setDateFormat(DateUtil.PATTERN_YYYY_MM_DD_HH_MM_SS);fastJsonConfig.setCharset(Charset.forName("utf-8"));// 自定义Boolean类型序列化配置fastJsonConfig.getSerializeConfig().put(Boolean.class, new BooleanToIntegerSerializer());return fastJsonConfig;}/*** 支持的mediaType类型*/private List<MediaType> getSupportedMediaType() {ArrayList<MediaType> mediaTypes = Lists.newArrayList();mediaTypes.add(MediaType.APPLICATION_JSON);mediaTypes.add(MediaType.APPLICATION_ATOM_XML);mediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);mediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);mediaTypes.add(MediaType.APPLICATION_PDF);mediaTypes.add(MediaType.APPLICATION_RSS_XML);mediaTypes.add(MediaType.APPLICATION_XHTML_XML);mediaTypes.add(MediaType.APPLICATION_XML);mediaTypes.add(MediaType.IMAGE_GIF);mediaTypes.add(MediaType.IMAGE_JPEG);mediaTypes.add(MediaType.IMAGE_PNG);mediaTypes.add(MediaType.TEXT_EVENT_STREAM);mediaTypes.add(MediaType.TEXT_HTML);mediaTypes.add(MediaType.TEXT_MARKDOWN);mediaTypes.add(MediaType.TEXT_PLAIN);mediaTypes.add(MediaType.TEXT_XML);//增加解析spring boot actuator结果的解析mediaTypes.add(MediaType.valueOf("application/vnd.spring-boot.actuator.v2+json"));return mediaTypes;}}
运行结果
{"code": "S00200","message": "操作成功","sign": 1,"body": {}}

