记得有一次的面试是。如何在Spring中将JackSon
替换为 FastJson
,emmmm…当时的回答是只需要替换 pom.xml,然后在使用的时候引入FastJosn就行了,但是在当时显然没有理解到面试官的意图,既然面试官强调的是如何替换,那么修改pom.xml
很显然不是面试官所想要的答案,那还有什么答案呢?
有一个方法可能是面试官想要的,那就是重写Spring的HttpMesageConverter
方法,在这个方法里面引入FastJson
的配置,然后替换掉Spring默认的Jackson
。
替换方式有几种,一种是返回一个HttpMesageConverter
,另一种是继承WebMvcConfigurerAdapter
来实现 configureMessageConverters
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullStringAsEmpty);
fastJsonConfig.setCharset(Charset.forName("UTF-8")); fastJsonConfig.setDateFormat("yyyy-MM-dd hh:mm:ss"); FastJsonHttpMessageConverter Converter = new FastJsonHttpMessageConverter(); Converter.setFastJsonConfig(fastJsonConfig); HttpMessageConverter<?> converter = Converter; converters.add(0,converter); super.configureMessageConverters(converters); }
|
Controller类
1 2 3 4 5 6 7 8 9
| @RequestMapping("/testjson") @ResponseBody public TestJson forword(@RequestBody TestJson testJson) { System.out.println(testJson.getId()); System.out.println(testJson.getName()); System.out.println(testJson.isFlag()); return testJson; }
|
打印结果如下:
1 2 3 4 5 6 7 8 9 10 11
| { "id":1, "name":null }
{ "flag": false, "id": 1, "name": "" }
|
所以可以看到默认的Jackson已经被替换为Fastjson了
为了区别与Jackson的差异,在这里注释掉Jackson的config,然后再次请求,结果如下:
1 2 3 4 5
| { "id": 1, "name": null, "flag": false }
|
可以看到String为null的话,并没有被替换为””