史上最简单的SpringBoot教程之如何使用FastJson解析JSON数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gaomb_1990/article/details/80962150

一、准备

开发环境:1.7.0_79
开发工具:Eclipse
项目管理工具:Maven3
操作系统:Windows8

Spring boot版本:1.4.1.RELEASE

二、案例

跟前面工程一样,搭建一个Maven工程SpringBootFastJson


POM文件中导入相关依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.queen.springboot</groupId>
	<artifactId>SpringBootFastJson</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.7</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.15</version>
		</dependency>
	</dependencies>
</project>

这里我们添加了alibaba提供的json依赖包fastjson

实体类User

public class User {
 private int id;
 private String loginId;
 private String userName;
 private String email;
 @JSONField(format="yyyy-MM-dd HH:mm")
 private Date createDate;

 public int getId() {
      return id;
 }

 public void setId(int id) {
      this.id = id;
 }

 public String getLoginId() {
      return loginId;
 }

 public void setLoginId(String loginId) {
      this.loginId = loginId;
 }

 public String getUserName() {
      return userName;
 }

 public void setUserName(String userName) {
      this.userName = userName;
 }

 public String getEmail() {
      return email;
 }

 public void setEmail(String email) {
      this.email = email;
 }

 public Date getCreateDate() {
      return createDate;
 }

 public void setCreateDate(Date createDate) {
      this.createDate = createDate;
 }

}

控制类SpringBootFastJsonController

@RestController
public class SpringBootFastJsonController {

	@RequestMapping(value="/getUser", produces = "application/json; charset=utf-8")
	public User getUser() {
		User user = new User();
		user.setId(1);
		user.setLoginId("queen");
		user.setUserName("奎恩");
		user.setEmail("12345678@qq.com");
		return user;
	}
}
前面的代码跟我们配置默认Spring boot返回json时候代码是一样的。下面我们开始编写启动类APP,目前配置fastjson有两种方法
  • 第一种:①启动类继承WebMvcConfigurerAdapter ②覆盖方法ConfigureMessageConverters
  • 第二种:在APP启动类中,注入Bean HttpMessageConverters

我们先介绍第一种:

编写APP

@SpringBootApplication
public class APP extends WebMvcConfigurerAdapter {

	@Override
	public void configureMessageConverters(
			List<HttpMessageConverter<?>> converters) {
		//定义一个converter转换消息的对象
		FastJsonHttpMessageConverter fastconverter = new FastJsonHttpMessageConverter();
		//添加fastjson的配置信息,比如:是否需要格式化返回的json数据
		FastJsonConfig fastJsonConfig = new FastJsonConfig();
		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
		//在converter中添加配置信息
		fastconverter.setFastJsonConfig(fastJsonConfig);
		//将converter添加到converters中
		converters.add(fastconverter);
	}

	public static void main(String[] args) {
		SpringApplication.run(APP.class, args);
	}

}

右键Run As -> Java Application,启动应用,使用http://localhost:8080/getUser看是否能够访问应用


但是我们发现了一个问题,就是返回的userName是乱码的。那我们要怎么解决这个问题呢?其实很简单只需要在APP类中的configureMessageConverters方法中加入三段代码就可以搞定(这是网上大部分的做法,但是笔者加入了之后并没有生效),后来笔者在getUser方法上添加了RequestMapping中添加了produces = “application/json; charset=utf-8″才生效,需要读者自己多尝试一下。修改之后的代码如下:

@Override
public void configureMessageConverters(
	List<HttpMessageConverter<?>> converters) {
	//定义一个converter转换消息的对象
	FastJsonHttpMessageConverter fastconverter = new FastJsonHttpMessageConverter();
	//添加fastjson的配置信息,比如:是否需要格式化返回的json数据
	FastJsonConfig fastJsonConfig = new FastJsonConfig();
	fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
	//处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastconverter.setSupportedMediaTypes(fastMediaTypes);
	//在converter中添加配置信息
	fastconverter.setFastJsonConfig(fastJsonConfig);
	//将converter添加到converters中
	converters.add(fastconverter);
}

重新启动服务访问,恢复正常


这是我们介绍的第一种方式

那接下来我们来看第二种方式,第二种方式是以代码方式实现,具体写法与第一种大同小异。

新建一个启动类FastJsonApp

@SpringBootApplication
public class FastJsonAPP {

	@Bean
	public HttpMessageConverters fastJsonHttpMessageConverters() {
		FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
		FastJsonConfig fastJsonConfig = new FastJsonConfig();
		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
		fastConverter.setFastJsonConfig(fastJsonConfig);
		HttpMessageConverter<?> converter = fastConverter;
		return new HttpMessageConverters(converter);
	}

	public static void main(String[] args) {
		SpringApplication.run(FastJsonAPP.class, args);
	}

}

右键Run As -> Java Application,启动应用,使用http://localhost:8080/getUser看是否能够访问应用


同样访问成功,但是这种方式没有出现乱码。所以推荐用HttpMessageConverters这种配置的模式去加载。至此,我们关于如何使用FastJson解析JSON数据介绍完毕。


=======欢迎大家拍砖,小手一抖,多多点赞哟!=======

版权声明:本文为博主原创文章,允许转载,但转载必须标明出处。


展开阅读全文

没有更多推荐了,返回首页