Spring_Boot 之二: Spring_Boot返回 FastJson格式数据 及中文乱码问题

一:spring_Boot 默认返回Jackson

1、代码

package com.siyang.spring_boot;

import java.util.Date;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.siyang.spring_boot.entity.User;
/**
 * @RestController等价于springmvc的@Controller
 * @author admin
 *
 */
@RestController
public class HelloController {

	@RequestMapping(value="hello")
	public String hello(){
		return "Hello Word 之 Spring boot";
	}
	
	@RequestMapping(value="getUser")
	public User getUser(){
		User user = new User();
		user.setAge(10);
		user.setId(1);
		user.setName("张小凡");
		user.setCreateTime(new Date());
		return user;
	}
}

2、返回值Jackson数据

Spring_Boot 之二: Spring_Boot返回 FastJson格式数据 及中文乱码问题_第1张图片

二:返回fastjson数据

1、引入fastjson依赖库


	4.0.0

	com.siyang
	spring_boot
	0.0.1-SNAPSHOT
	jar

	spring_boot
	http://maven.apache.org

	

	
		UTF-8
		
		1.8
	

	
		org.springframework.boot
		spring-boot-starter-parent
		1.4.0.RELEASE
	


	
		
			org.springframework.boot
			spring-boot-starter-web
			
			
				
		
		
		
		
			com.alibaba
			fastjson
			1.2.15
		
		
		
		
            org.springframework.boot
            spring-boot-devtools
            true
           true
		
		
		
		
			junit
			junit
			3.8.1
			test
		
	

2、启动类

2.1第一种方法:

(1)启动类继承extends WebMvcConfigurerAdapter

(2)覆盖方法configureMessageConverters
package com.siyang.spring_boot;

import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;

import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
 * Hello world!
 * 第二讲:使用FastJson解析JSON数据
 * 第一种方法就是:
 * (1)启动类继承extends WebMvcConfigurerAdapter
 * (2)覆盖方法configureMessageConverters
 * 第二种方法就是:
 * (1)在App.java启动类中,注入Bean : HttpMessageConverters
 */
@SpringBootApplication
public class App extends WebMvcConfigurerAdapter{
	
	/**
	 * 第二讲:使用FastJson解析JSON数据 第一种方法
	 */
	@Override
	public void configureMessageConverters(List> converters) {
		super.configureMessageConverters(converters);
		
		/**
		 * 1、先定义一个 FastJsonHttpMessageConverter fastConverter转换消息对象
		 * 2、添加fastJsonConfig配置信息,比如:是否要格式化返回的json数据
		 * 3、在fastConverter中添加配置信息
		 * 4、将fastConverter添加到converters
		 */
		
		// 1、先定义一个 FastJsonHttpMessageConverter fastConverter转换消息对象
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        
        //2、添加fastJsonConfig配置信息,比如:是否要格式化返回的json数据
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.PrettyFormat
        );
        
        //3、在fastConverter中添加配置信息
        fastConverter.setFastJsonConfig(fastJsonConfig);
		
        //4、将fastConverter添加到converters
    	converters.add(fastConverter);
	}

    public static void main( String[] args )
    {
    	/**
    	 * main方法启动我们的
    	 */
        SpringApplication.run(App.class, args);
    }
}

2.2 第二种方法:在App.java启动类中,注入Bean : HttpMessageConverters

/**
	 * 第二种方法:在App.java启动类中,注入Bean : HttpMessageConverters
	 * @return
	 */
	@Bean
	public HttpMessageConverters fastJsonHttpMessageConverters() {
		
		// 1、先定义一个 FastJsonHttpMessageConverter fastConverter转换消息对象
		FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
		
		//2、添加fastJsonConfig配置信息,比如:是否要格式化返回的json数据
		FastJsonConfig fastJsonConfig = new FastJsonConfig();
		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
		
		//3、在fastConverter中添加配置信息
		fastConverter.setFastJsonConfig(fastJsonConfig);
		HttpMessageConverter converter = fastConverter;
		return new HttpMessageConverters(converter);
	}

3、实体类里面对createTime进行格式化

Spring_Boot 之二: Spring_Boot返回 FastJson格式数据 及中文乱码问题_第2张图片

4、返回fsatjson

Spring_Boot 之二: Spring_Boot返回 FastJson格式数据 及中文乱码问题_第3张图片

三、fastjson中文乱码问题处理

中文乱码有两种处理方法:

方法一:启动类里重写方法里增加配置

package com.siyang.spring_boot;

import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;

import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

@SpringBootApplication
public class App extends WebMvcConfigurerAdapter{
	
	@Override
	public void configureMessageConverters(List> converters) {
		super.configureMessageConverters(converters);
		
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.PrettyFormat
        );
        // 处理中文乱码问题
        List fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);
        
        fastConverter.setFastJsonConfig(fastJsonConfig);
    	converters.add(fastConverter);
	}
    public static void main( String[] args )
    {
        SpringApplication.run(App.class, args);
    }
}

方法二:

在具体方法上添加注解 produces = { "application/json;charset=UTF-8" }

@RequestMapping(value="getUser",produces = { "application/json;charset=UTF-8" })
	public User getUser(){
		User user = new User();
		user.setAge(10);
		user.setId(1);
		user.setName("张小凡");
		user.setCreateTime(new Date());
		return user;
	}

特别提醒:使用FastJson解析数据,中文乱码或显示“???”,如上面所说的解决中文乱码第一种方法,只有是

FastJson解析数据的第一种方法才能实现,与第二种方法

不起作用;


你可能感兴趣的:(Spring_Boot)