Spring Boot (二) fastJSON的使用

Spring boot,通过创建实体类,然后通过实体类返回则就是json的格式,所以使用spring boot,不用担心返回格式处理不了的问题。

1

springBoot,默认使用的json解析框架是Jackson。

2

虽然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)来决定字段的显示与否,也可以解决我们日常过多的字段不需要返回的问题。

5
6

方法二:在启动类中,注入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的依赖使用。

posted on 2017-04-29 21:31  huohuoL  阅读(251)  评论(0编辑  收藏  举报

导航