Java充电社
专辑
博文
联系我
本人继续续收门徒,亲手指导
SpringMVC教程
-> Converter转换器详解
1、Helloword
2、@Controller、@RequestMapping
3、接口测试利器
4、如何接受请求中的参数?
5、@RequestBody接收Json格式数据
6、多文件上传
7、返回页面常见的5种方式
8、返回json格式数据 & 通用返回值设计
9、SpringMVC返回null是什么意思?
10、异步处理请求
11、如何集成静态资源?
12、拦截器怎么用?
13、统一异常处理
14、实战篇:通用返回值 & 异常处理设计
15、全注解的方式 & 原理解析
16、源码解析SpringMVC处理请求的流程
17、源码解析SpringMVC容器的启动过程
18、RequestBodyAdvice:对@ReuqestBody进行增强
19、ResponseBodyAdvice:对@ResponseBody进行增强
20、RESTful接口详解
21、接口调用利器RestTemplate
22、参数解析器HandlerMethodArgumentResolver解密
23、@RequestParam用法及原理详解
24、@RequestBody原理解密
25、@RequestHeader详解
26、@CookieValue详解
27、@RequestAttribute详解
28、@SessionAttribute详解
29、重定向和转向详解
30、Converter转换器详解
31、跨域问题详解
32、类容协商,颠覆你的认知
33、终章
34、CORS通信
35、浏览器安全策略 & CORS
36、Http中的Content-Type详解
上一篇:重定向和转向详解
下一篇:跨域问题详解
<div style="display:none"></div> **大家好,我是路人,这是SpringMVC系列第30篇。** 本文将讲解Spring中的另外一个知识点:SpringMVC中转换器`Converter`的使用。 好陌生啊,这玩意是干啥的呢?请往下看。 ## 1、来看一个需求 如下,有一个UserDto类,表示用户信息 ```java public class UserDto { //用户名 private String name; //年龄 private Integer age; //省略getter、setter方法 } ``` 要求后台所有接口接受`UserDto`数据时,参数的值格式为:`name,age`,比如下面接口 ```java @RequestMapping("/convert/test1") public UserDto test1(@RequestParam("user") UserDto user) { System.out.println("name:" + user.getName()); System.out.println("age:" + user.getAge()); return user; } ``` 能够接受的请格式:`/convert/test1?user=ready,1`,这种需求如何实现呢? ## 2、需用Converter接口来实现 SpringMVC中为我们提供的另外一个接口`org.springframework.core.convert.converter.Converter`,这个接口用来将一种类型转换为另一种类型,看看其源码如下,调用后端接口的时候,http传递的参数都是字符串类型的,但是后端却可以使用Integer、Double等其他类型来接收,这就是`Converter`实现的。 ```java @FunctionalInterface public interface Converter<S, T> { /** * 将source转换为目标T类型 */ @Nullable T convert(S source); } ``` Spring内部提供了很多默认的实现,用于各种类型转换 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/241/2a6ae2e0-a0b2-4394-8b2a-4a00d7faa476.png) 实现开头的需求,需要我们自定义一个Converter<String,UserDto>,将其添加到SpringMVC转换器列表中,他负责将String类型转换为UserDto类型。下面来看具体代码实现 ## 3、代码实现 - 代码如下,添加一个配置类,实现`WebMvcConfigurer`接口 - 重写`addFormatters`方法,在这个方法中添加一个自定义的`Converter`,实现其convert方法,将`name,age`格式的字符串转换为UserDto对象返回 ```java @Configuration public class MvcConfig implements WebMvcConfigurer { @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new Converter<String, UserDto>() { @Override public UserDto convert(String source) { if (source == null) { return null; } String[] split = source.split(","); String name = split[0]; Integer age = Integer.valueOf(split[1]); return new UserDto(name, age); } }); } } ``` 接口代码 ```java @RestController public class ConverterTestController { @RequestMapping("/convert/test1") public UserDto test1(@RequestParam("user") UserDto user) { System.out.println("name:" + user.getName()); System.out.println("age:" + user.getAge()); return user; } } ``` 访问请求`/convert/test1?user=ready,1`,效果如下: ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/241/463b5cc6-59c3-4086-94ee-a119e2e938c6.png) tomcat控制台输出 ```java name:ready age:1 ``` ## 4、案例代码git地址 ### 4.1、git地址 ```html https://gitee.com/javacode2018/springmvc-series ``` ### 4.2、本文案例代码结构说明 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/241/2fb2db0a-0056-4e34-b8b5-89829b5a8061.png) <a style="display:none" target="_blank" href="https://mp.weixin.qq.com/s/_S1DD2JADnXvpexxaBwLLg" style="color:red; font-size:20px; font-weight:bold">继续收门徒,亲手带,月薪 4W 以下的可以来找我</a> ## 最新资料 1. <a href="https://mp.weixin.qq.com/s?__biz=MzkzOTI3Nzc0Mg==&mid=2247484964&idx=2&sn=c81bce2f26015ee0f9632ddc6c67df03&scene=21#wechat_redirect" target="_blank">尚硅谷 Java 学科全套教程(总 207.77GB)</a> 2. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484192&idx=1&sn=505f2faaa4cc911f553850667749bcbb&scene=21#wechat_redirect" target="_blank">2021 最新版 Java 微服务学习线路图 + 视频</a> 3. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484573&idx=1&sn=7f3d83892186c16c57bc0b99f03f1ffd&scene=21#wechat_redirect" target="_blank">阿里技术大佬整理的《Spring 学习笔记.pdf》</a> 4. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484544&idx=2&sn=c1dfe907cfaa5b9ae8e66fc247ccbe84&scene=21#wechat_redirect" target="_blank">阿里大佬的《MySQL 学习笔记高清.pdf》</a> 5. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485167&idx=1&sn=48d75c8e93e748235a3547f34921dfb7&scene=21#wechat_redirect" target="_blank">2021 版 java 高并发常见面试题汇总.pdf</a> 6. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485664&idx=1&sn=435f9f515a8f881642820d7790ad20ce&scene=21#wechat_redirect" target="_blank">Idea 快捷键大全.pdf</a> ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/1/2883e86e-3eff-404a-8943-0066e5e2b454.png)
#custom-toc-container