⬅️ 上一篇: springboot系列九: 接收参数相关注解
🎉 欢迎来到 springboot系列十: 自定义转换器,处理JSON,内容协商 🎉
在本篇文章中,我们将探讨如何在 Spring Boot 中实现自定义转换器、处理 JSON 数据以及进行内容协商。通过掌握这些技术,您可以更灵活地处理不同格式的数据,提高应用程序的兼容性和用户体验。
🔧 本篇需要用到的项目: springbootweb项目
自定义转换器
基本介绍
1.SpringBoot在响应客户端请求时, 将提交的数据封装成对象时, 使用了内置转换器
2.SpringBoot也支持自定义转换器, 这个内置转换器在debug
的时候, 可以看到, 提供了124
个内置转换器, 看下源码. GenericConverter类-ConvertiblePair(内部类)
]
应用实例
需求说明: 演示自定义转换器使用
1.修改save.html
<!--使用自定义转换器关联car, 字符串整体提交, 使用,号间隔-->
坐骑: <input name="name" value="碧水金睛兽,666.6"><br/
2.创建src/main/java/com/zzw/springboot/config/WebConfig.java
, 增加自定义转换器
springboot系列四: sprintboot容器功能
/**
* @Configuration(proxyBeanMethods = false)
* 1.表示 WebConfig 是一个配置类
* 2.proxyBeanMethods = false 表示使用Lite模式
*/
@Configuration(proxyBeanMethods = false)
public class WebConfig {
//注入bean WebMvcConfiger
@Bean
public WebMvcConfigurer webMvcConfigurer() {
//整个是WebMvcConfigurer接口的匿名内部类
return new WebMvcConfigurer() {
@Override
public void addFormatters(FormatterRegistry registry) {
/**
* 解读
* 1.在addFormatters方法中, 增加一个自定义转换器
* 2.增加自定义转换器 String -> Car
* 3.增加的自定义转换器会注册到 converters 容器中
* 4.converters 底层结构是 ConcurrentHashMap, 内置有124个转换器[不同版本个数不一样~]
* 5.一会我们debug查看这些转换器
*/
registry.addConverter(new Converter<String, Car>() {
//传入Converter接口的匿名内部类
@Override
public Car convert(String source) {
//source就是 传入的字符串 碧水金睛兽,666.6
//这里加入自定义的转换业务代码
if (!ObjectUtils.isEmpty(source)) {
String[] split = source.split(",");
Car car = new Car();
car.setVehicleName(split[0]);
car.setVehiclePrice(Double.parseDouble(split[1]));
return car;
}
return null;
}
});
}
};
}
}
3.测试
monster = Monster(id=100, name=张三, age=30, maritalStatus=false, birthday=Sat Jan 01 00:00:00 CST 1994, car=Car(vehicleName=碧水金睛兽, vehiclePrice=666.6))
查看源码
1.debug
, 可以看到我们新增的Converter
注意事项和细节
1.注册转换器换种写法, 方便理解
/**
* @Configuration(proxyBeanMethods = false)
* 1.表示 WebConfig 是一个配置类
* 2.proxyBeanMethods = false 表示使用Lite模式
*/
@Configuration(proxyBeanMethods = false)
public class WebConfig {