spring mvc 自定义Converter 设置

我们在开发过程中,前端页面传过来的参数类型并都不是后端所期待的,前端传递过来的参数我们后端不能处理就会报错

前端传递过来的是字符串,返回后端报错

因为spring MVC并不知道怎么将 "玳瑁,1" 转换成他理解的样子

java 复制代码
public class Pet {
    private String name;
    private int age;
    private int sex; //1:男,2:女
    private Double weight;
}

这个时候我们需要一个自定义 configure

java 复制代码
@Configuration //告诉boot 这是一个配置类 == 配置文件,在 Spring 容器中默认是单实例
public class MyConfig {

    //配置类里面使用@Bean标注在方法上给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值就是组件在容器中的实例,默认是单实例
    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void addFormatters(FormatterRegistry registry) {
                registry.addConverter(new Converter<String, Pet>() {

                    @Override
                    public Pet convert(String source) {
                        if (StringUtils.isEmpty(source)) {
                            return null;
                        }
                        Pet pet = new Pet();
                        String[] split = source.split(",");
                        pet.setName(split[0]);
                        pet.setAge(Integer.valueOf(split[1]));
                        return pet;
                    }
                });
            }
        };
    }
}

我们点进 WebMvcConfigurer 发现这是一个接口,在这个接口中有一个方法 addFormatters(FormatterRegistry registry) 。添加类型转换器和格式化器。

debug重启项目,我们来到 ModelAttributeMethodProcessor类的WebDataBinder binder = binderFactory.createBinder(webRequest, attribute, name);方法中
(WebDataBinder:外部数据绑定器,将请求参数绑定到指定的javabean里面,指定的javaBean就是之前创建的 attribute)

此时我们发现外部数据绑定器数量由原来的124个变成125个

我们放行代码,来到我们自定义的 converter 中,自定义的converter会将前端传过来的字符串"玳瑁,1"分割,并赋值给pet对象

相关推荐
文丑颜不良啊1 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang2 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪3 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息3 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼3 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff4 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff5 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
SL_staff6 小时前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品
nice_lcj5206 小时前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
桦说编程7 小时前
TransmittableThreadLocal 解读:从 CRR 机制到上下文所有权
java·后端·源码