fastjson 是阿里巴巴的一个开源json解析框架,是目前json解析速度最快的快远框架,可以集成到springboot内,fastjson继承完成后不能马上使用需要提供 HttpMessageCoverter后才能使用。
1.pom.xml中加入fastjson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
2.实体类创建
package com.example.demo.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.util.Date;
@Data
public class Book1 {
private String name;
private String author;
//json序列化时Bean中的属性会被忽略
@JsonIgnore
private Float price;
//json序列化时格式化Bean中的属性输出的格式
@JSONField(format = "yyyy-MM-dd")
private Date PublicationDate;
}
Controller代码
package com.example.demo.controller;
import com.alibaba.fastjson.JSON;
import com.example.demo.entity.Book1;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@RestController
public class Book1Controller {
@GetMapping("/book1")
public String book(){
List<Book1> list = new ArrayList<>();
Book1 book = new Book1();
book.setAuthor("博然");
book.setName("Java开发全栈");
book.setPrice(30.f);
book.setPublicationDate(new Date());
list.add(book);
String string = JSON.toJSONString(list);
System.out.println(string);
return string;
}
}
可自定义配fastjson
WebMvcAutoCOnfiguration提供了SpringMvc最基本的配置只要实现WebMvcConfigurer接口就 行。
package com.example.demo.config;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.nio.charset.Charset;
import java.util.List;
@Configuration
public class MyFastJsonConfig implements WebMvcConfigurer
{
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
// 1.定义一个converters转换消息的对象
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setDateFormat("yyyy-MM-dd");
config.setCharset(Charset.forName("UTF-8"));
config.setSerializerFeatures(
SerializerFeature.WriteClassName,
SerializerFeature.WriteMapNullValue,
SerializerFeature.PrettyFormat,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteNullStringAsEmpty
);
converter.setFastJsonConfig(config);
converters.add(converter);
}
}
fastjson @JSONField一些常用的内容
如果此时我将Book类转成json,@JSONField(name="username") 此时在输出的时候json中 不会存在name的key,username会取代name来帮它工作
package com.example.demo.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.util.Date;
@Data
public class Book1 {
@JSONField(name="username");
private String name;
private String author;
//json序列化时Bean中的属性会被忽略
@JsonIgnore
private Float price;
//json序列化时格式化Bean中的属性输出的格式
@JSONField(format = "yyyy-MM-dd")
private Date PublicationDate;
}
序列化时候过滤掉这个实体类的字段可以用:
@JSONField(serialize = false)
反序列化过滤
@JSONField(deserialize = false)
date时间变成特殊格式
@JSONField(format = "yyyy-MM-dd")
private Date date = new Date();
生成json或者解析json时获得的对象名字前面都加上"abc",这就需要具体定制,你想用"aaa"或者"abb"都可以,解析和生成结合到一起
@JSONField(deserializeUsing = NameDeserializer.class,serializeUsing=NameDeserializer.class)
private String name ="啵啵球";
如果期间有任何问题请给我留言。感谢。