Spring Boot使用FastJson解析JSON数据

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:
速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson;

功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省。

下面就演示如何在Spring boot中使用FastJson:

先在pom.xml中导入依赖

<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.15</version>
		</dependency>

配置方法有两种,第一种我比较常用的:

在spring配置类中注入Bean : HttpMessageConverters

@Bean
	public HttpMessageConverters fastJsonHttpMessageConverters(){
		//1、需要先定义一个convert转换消息的对象
		FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
		
		//2、添加fastJson的配置信息,比如:是否格式化返回的json数据
		FastJsonConfig fastJsonConfig = new FastJsonConfig();
		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
		
		//A、处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);
		
		//3、在convert中添加配置信息
		fastConverter.setFastJsonConfig(fastJsonConfig);
		
		//4、返回
		HttpMessageConverter<?> converter = fastConverter;
		return new HttpMessageConverters(converter);
	}

第二种配置方法:

首先需要Spring boot启动类继承WebMvcConfigurerAdapter

然后覆盖父类方法configureMessageConverters

@Override
		public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
	    	super.configureMessageConverters(converters);
			
	        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
	 
	        FastJsonConfig fastJsonConfig = new FastJsonConfig();
	        fastJsonConfig.setSerializerFeatures(
	                SerializerFeature.PrettyFormat
	        );
	        
	        //A、处理中文乱码问题
	        List<MediaType> fastMediaTypes = new ArrayList<>();
	        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
	        fastConverter.setSupportedMediaTypes(fastMediaTypes);
	        
	        fastConverter.setFastJsonConfig(fastJsonConfig);
			
	    	converters.add(fastConverter);
		}

到此FastJson就配置完成了。

测试一下效果:

首先建一个实体类

public class User {

	private int id;
	
	private String name;
	
	//返回的fastjson指定的格式
	@JSONField(format="yyyy-MM-dd HH:mm")
	private Date createTime;

	
	private String remark;
	
	//序列化时不包含该字段  json不返回remark
	@JSONField(serialize=false)
	public String getRemark() {
		return remark;
	}
        //此处省略getter  setter
}


然后在Controller中写一个测试方法:

@RequestMapping("getUser")
	@ResponseBody
	public User getUser(){
		User user = new User();
		user.setId(1);
		user.setName("张三");//如果不添加第A步,会出现中文乱码
		user.setCreateTime(new Date());
		user.setRemark("这是一个备注");
		return user;
	}

注意必须要上

@ResponseBody

@ResponseBody注解的作用是将controller的方法返回的对象通过转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据

在使用此注解之后不会再走springmvc的视图解析器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据


最后访问一下:http://127.0.0.1:8080/getUser



@JSONField还有其他的用法:

/**bean 转json 时会把bean中的id转换为user_id */
	@JSONField(name="user_id")
	public int getId() {
		return id;
	}

	/**json 转bean 时会把json中的user_id值赋值给id*/
	@JSONField(name="user_id")
	public void setId(int id) {
		this.id = id;
	}

fastjson默认的序列化规则是当你的字段的值为null的时候,它是不会给你序列化这个字段的,即如果name为null的时候,得到的json中不会出现name这个属性。


这时候可以这样

@JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue)
	private String name;

结果






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值