【SpringBoot】八、使用fastjson返回JSON视图

tech2022-12-13  106

目录

1. 设置依赖

2. 写个配置类

3. 设置实体类字段的数据格式

(1)时间

(2)中文编码

4. 自行配置业务层、持久层

5. 编写控制器

6. 访问


1. 设置依赖

排除SpringBoot默认的json依赖,用阿里的fastjson

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> </exclusion> </exclusions> </dependency> <!-- 配置fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.70</version> </dependency>

2. 写个配置类

ps:有人写在启动器类,不推荐,别污染。

@Configuration让SpringBoot自动加载类内的配置。因为WebMvcConfigurerAdapter过期,所以直接实现接口WebMvcConfigurer。该接口为SpringBoot处理用户自行添加的配置,除了视图过滤,还有拦截器、过滤器等配置也可在该接口配置。

/** * 关于FastJson的配置 * * @author ZRH * @version 1.0.0 * @date 2020/9/3 */ @Configuration public class FastJsonConfiguration implements WebMvcConfigurer { /** * 自定义消息转换器 * * @param converters 消息转换器列表 */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { // 1、定义一个convert转换消息的对象 FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); // 2、添加fastjson的配置信息 FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( DisableCircularReferenceDetect , WriteMapNullValue , WriteNullBooleanAsFalse); // 3、在convert中添加配置信息 fastConverter.setFastJsonConfig(fastJsonConfig); // 4、将convert添加到converters中 converters.add(fastConverter); } }

其中,序列化特性有:

WriteNullListAsEmpty

List字段如果为null,输出为[],而非nullWriteNullStringAsEmpty字符类型字段如果为null,输出为"",而非nullDisableCircularReferenceDetect消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)WriteNullBooleanAsFalseBoolean字段如果为null,输出为false,而非nullWriteMapNullValue是否输出值为null的字段,默认为false

 

3. 设置实体类字段的数据格式

(1)时间

@JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date productionDate;

(2)中文编码

有人在配置类里用,不过存在过期字段,不推荐:

List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); fastConverter.setFastJsonConfig(fastJsonConfig); converters.add(fastConverter);

 

我这里直接在全局配置文件application.yml配置编码:

server: port: 8080 servlet: encoding: force: true

4. 自行配置业务层、持久层

5. 编写控制器

@GetMapping("/product/list") public List<ProductDomain> productDomainList() { return productService.listAllProducts(); }

6. 访问

最新回复(0)