依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
SpringBoot启动类中配置转换器
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
//1、创建FastJson信息转换对象
FastJsonHttpMessageConverter fastConverter=new FastJsonHttpMessageConverter();
//2、创建FastJsonConfig对象并设定序列化规则 序列化规则详见SerializerFeature类中,后面会讲
FastJsonConfig fastJsonConfig= new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,SerializerFeature.WriteNonStringKeyAsString);
//本人就坑在WriteNonStringKeyAsString 将不是String类型的key转换成String类型,否则前台无法将Json字符串转换成Json对象
//3、中文乱码解决方案
List<MediaType> fastMedisTypes = new ArrayList<MediaType>();
fastMedisTypes.add(MediaType.APPLICATION_JSON_UTF8);//设定Json格式且编码为utf-8
fastConverter.setSupportedMediaTypes(fastMedisTypes);
//4、将转换规则应用于转换对象
fastConverter.setFastJsonConfig(fastJsonConfig);
return new HttpMessageConverters(fastConverter);
}
Controller
//初始化入库情况选项数据
@ApiOperation("初始化入库情况选项数据")
@RequestMapping(value = "init-stock-statu",method = RequestMethod.POST)
@ResponseBody
@CrossOrigin
public ResultBean<?> initStockStatus(){
Map<String, Map<Object, String>> partThree = new HashMap<>(3);
//入库状态 下拉选框
Map<Object, String> stockStatus = new HashMap<>(6);
for (StockStatusEnum c : StockStatusEnum.values()) {
stockStatus.put(c.getCode(), c.getDesc());
}
partThree.put("stockStatus", stockStatus);
//入库类型 下拉选框
Map<Object, String> stockType = new HashMap<>(6);
for (StockTypeEnum c : StockTypeEnum.values()) {
stockType.put(c.getCode(), c.getDesc());
}
partThree.put("stockType", stockType);
return new ResultBean<>(partThree);
}
当访问controller的时候,就会将对象转化成Json字符串返回了
FastJson的SerializerFeature(序列化规则)
public enum SerializerFeature {
QuoteFieldNames,//输出key时是否使用双引号,默认为true
UseSingleQuotes,//使用单引号而不是双引号,默认为false
WriteMapNullValue,//是否输出值为null的字段,默认为false
WriteEnumUsingToString,//Enum输出name()或者original,默认为false
UseISO8601DateFormat,//Date使用ISO8601格式输出,默认为false
WriteNullListAsEmpty,//List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty,//字符类型字段如果为null,输出为"",而非null
WriteNullNumberAsZero,//数值字段如果为null,输出为0,而非null
WriteNullBooleanAsFalse,//Boolean字段如果为null,输出为false,而非null
SkipTransientField,//如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true
SortField,//按字段名称排序后输出。默认为false
@Deprecated
WriteTabAsSpecial,//把\t做转义输出,默认为false
PrettyFormat,//结果是否格式化,默认为false
WriteClassName,//序列化时写入类型信息,默认为false。反序列化是需用到
DisableCircularReferenceDetect,//消除对同一对象循环引用的问题,默认为false
WriteSlashAsSpecial,//对斜杠'/'进行转义
BrowserCompatible,//将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false
WriteDateUseDateFormat,//全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
NotWriteRootClassName,//暂不知,求告知
DisableCheckSpecialChar,//一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false
BeanToArray; //暂不知,求告知
private SerializerFeature(){
mask = (1 << ordinal());
}
private final int mask;
public final int getMask() {
return mask;
}
public static boolean isEnabled(int features, SerializerFeature feature) {
return (features & feature.getMask()) != 0;
}
public static int config(int features, SerializerFeature feature, boolean state) {
if (state) {
features |= feature.getMask();
} else {
features &= ~feature.getMask();
}
return features;
}
}