您的位置:首页 > 编程语言 > Java开发

Spring Boot使用FastJson解析JSON数据

2018-03-01 17:38 471 查看
    阿里巴巴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启动类继承WebMvcConfi
a0fe
gurerAdapter
然后覆盖父类方法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;结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: