springboot整合web开发
web依赖自带返回json的格式
这个依赖中默认加入了 jackson-databind
作为 JSON 器,此时不需要添 额外的 JSON
理器就能返回一段 JSON 了。
自定义转换器:
1.集成Gson
常见的json处理器除了jackson-databind之外,还有Gson和fastjson,
Gson是google的开源json解析框架,使用Gson,首先需要去除默认的jackson-databind,然后加入Gson依赖
pom文件配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
由于 Spring Boot 中默 Gson 自动转换类 GsonHttpMessageConvertersConfiguration,
因此Gson 的依赖添加成功后 可以像使用 jackson-databind 那样直接使用 Gson 。但是在 Gson 进行
转换时 如果想对日期数据进行格式化, 那么还需要开发者自定义 HttpMessageConverter 。
@Configuration
public class GsonConfig {
//自己提供一个gsonHtppMessageConverter的实例
@Bean
GsonHttpMessageConverter gsonHttpMessageConverter(){
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
GsonBuilder builder=new GsonBuilder();
//设置日期格式
builder.setDateFormat("yyyy-MM-dd");
//过滤protected修饰的字段。
builder.excludeFieldsWithModifiers(Modifier.PROTECTED);
//创建Gson对象将json对象交给GsonHttpMessageConevter实例并返回
Gson gson=builder.create();
converter.setGson(gson);
return converter;
}
}
2.集成fastjson
fastjson是阿里巴巴的一个开源JSON解析框架,是目前JSON解析速度最快的开源框架。fastjson继承完之后不能马上使用,需要提供相应的HttpMessageConverter后才能使用
pom文件加入
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.8.2</version>
</dependency>
fastjson的HttpMessageConverter
/**自定义 MyFastJsonConfig ,完成对 FastJsonHttpMessageConverter Bean 的提供
* @author wuyuhong
* @date 2021年04月14日 10:56
*/
@Configuration
public class MyFastJsonConfig {
@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConever(){
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
// 配置了JSON 解析过程的一些细节,例如日期格式、数据编码、是否在生成的
//JSON 中输出类名 、是否输出 value 为null 的数据、生成的 JSON 格式化、空集合输出[]而非
//null 、空字符串输出""而非 null 等基本配直
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);
return converter;
}
}
config配置后还需要设置返回编码,application.properties中配置,不然中文乱码
server.servlet.encoding.force-response=true
另外一种方式实现webMvcConfigurer类
//@Configuration
public class GsonConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
// 配置了JSON 解析过程的一些细节,例如日期格式、数据编码、是否在生成的
//JSON 中输出类名 、是否输出 value 为null 的数据、生成的 JSON 格式化、空集合输出[]而非
//null 、空字符串输出""而非 null 等基本配直
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);
}
}
.自定义 MyWebMvcConfig 类并实现 WebMvcConfigurer 接口中的 configureMessageConverters方法
.将自定义的fastJsonHttpMessageConverter 加入 converters中
$$
如果使用了 Gson ,也可以采用这种方式配置,但是不推荐。 因为当项目中没有
GsonH Messag Conv巳出 Spring Boot 自己会提供一个 GsonHttpMessageConverter ,此
时重写 configureMessageConverters 方法 参数 converters 中已经有 GsonHttpMessageConverter的实例了,需要替换已有的 Gso nHttpMessageConv er 实例,操作比较麻烦,所以对于 Gson,推荐直接提供 GsonHttpMessageConverter
c
o
n
f
i
g
u
r
e
M
e
s
s
a
g
e
C
o
n
v
e
r
t
e
r
s
方
法
参
数
c
o
n
v
e
r
t
e
r
s
中
已
经
有
G
s
o
n
H
t
t
p
M
e
s
s
a
g
e
C
o
n
v
e
r
t
e
r
的
实
例
了
,
需
要
替
换
已
有
的
G
s
o
n
H
t
t
p
M
e
s
s
a
g
e
C
o
n
v
e
r
实
例
,
操
作
比
较
麻
烦
,
所
以
对
于
G
s
o
n
,
推
荐
直
接
提
供
G
s
o
n
H
t
t
p
M
e
s
s
a
g
e
C
o
n
v
e
r
t
e
r
configureMessageConverters 方法 参数 converters 中已经有 GsonHttpMessageConverter的实例了,需要替换已有的 Gso nHttpMessageConv er 实例,操作比较麻烦,所以对于 Gson,推荐直接提供 GsonHttpMessageConverter
configureMessageConverters方法参数converters中已经有GsonHttpMessageConverter的实例了,需要替换已有的GsonHttpMessageConver实例,操作比较麻烦,所以对于Gson,推荐直接提供GsonHttpMessageConverter