Spring Boot (二) fastJSON的使用
Spring boot,通过创建实体类,然后通过实体类返回则就是json的格式,所以使用spring boot,不用担心返回格式处理不了的问题。
springBoot,默认使用的json解析框架是Jackson。
虽然jackson能够满足json的解析,但是心里最熟悉的依旧是alibaba的fastjon,当然,fastjon的要求springboot也是可以满足的,我们只需要在pom文件中配置maven依赖就好。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
maven依赖完成之后,我们可以通过两种方式配置fastjon
方法一:启动类继承extends WebMvcConfigurerAdapter,且覆盖configureMessageConverters
package springboot;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
* Create with IntelliJ IDEA
* User: huoyajing
* Date: 2017/4/27
* Time: 15:14
* To change this template use File | Settings | File Templates.
*/
/**
* 在这里使用 @SpringBootApplication,来证明这是spring boot的应用程序
*/
@SpringBootApplication
public class App extends WebMvcConfigurerAdapter{
// 方法一:extends WebMvcConfigurerAdapter
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
//核心代码
/* 1、先定义一个convert转换消息的对象
2、添加fastjson的配置信息,比如是否要格式化返回的json数据;
3、在convert中添加配置信息
4、将convert添加到converters*/
//1、先定义一个convert转换消息的对象
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
//2、添加fastjson的配置信息,比如是否要格式化返回的json数据;
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
//是否需要格式化
SerializerFeature.PrettyFormat
);
//附加:处理中文乱码(后期添加)
List<MediaType> fastMedisTypes=new ArrayList<MediaType>();
fastMedisTypes.add(MediaType.APPLICATION_JSON_UTF8);
fastConverter.setSupportedMediaTypes(fastMedisTypes);
//3、在convert中添加配置信息
fastConverter.setFastJsonConfig(fastJsonConfig);
//4、将convert添加到converters
converters.add(fastConverter);
}
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
如何判定使用的是fastJon呢?我们在实体类上,添加如上一个时间参数:
private int id;
private String name;
//添加一个当前时间字段
@JSONField(format = "yyyy-MM-dd HH:mm")
private Date createTime;
@JSONField 就是基于fastjson的一种格式转换,通过返回值看到了我们想要的日期效果,所以这种json则是通过fastjson解析出来的;
如果解析数据遇到乱码问题的话,则通过上述代码段中添加的处理中文乱码方式来解决。
除此之外,我们还可以通过@JSONField(serialize = false)来决定字段的显示与否,也可以解决我们日常过多的字段不需要返回的问题。
方法二:在启动类中,注入Bean:HttpMessageConverters
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters(){
//1、先定义一个convert转换消息的对象
FastJsonHttpMessageConverter fastConverter=new FastJsonHttpMessageConverter();
//2、添加fastjson的配置信息,比如是否要格式化返回的json数据;
FastJsonConfig fastJsonConfig=new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
//附加:处理中文乱码
List<MediaType> fastMedisTypes = new ArrayList<MediaType>();
fastMedisTypes.add(MediaType.APPLICATION_JSON_UTF8);
fastConverter.setSupportedMediaTypes(fastMedisTypes);
//3、在convert中添加配置信息
fastConverter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter=fastConverter;
return new HttpMessageConverters(converter);
}
其实代码的核心是相同的,这是调取的方式不同而已。两种方式都可以满足我们对于fastjson的依赖使用。