首页 > 编程语言 > 详细

SpringMVC:自定义Converter

时间:2021-04-07 12:19:45      阅读:23      评论:0      收藏:0      [点我收藏+]

接着前一篇博客:SpringMVC:自定义参数绑定原理

测试

@Data
public class Person {
    private String userName;
    private Integer age;
    private Date birth;
    private Pet pet;
}
@Data
public class Pet {
    private String name;
    private String age;
}

index.html

这里,有一个属性pet,value以逗号分割,前面是name,后面是age

<form action="save" method="post">
    姓名: <input name="userName" value="admin"/> <br/>
    年龄: <input name="age" value="12"/> <br/>
    生日: <input name="birth" value="2021/01/01"/> <br/>
    宠物姓名:<input name="pet" value="cat,18"/><br/>
    <input type="submit" value="保存">
</form>

controller:

@PostMapping("save")
@ResponseBody
public Person save(Person person){
    return person;
}

先进行测试,直接报错了

技术分享图片

自定义Converter

在springboot2中,我们对springmvc的组件做一些定制化工作的话,一般需要实现WebMvcConfigurer接口,仔细找一找,不难发现注册自定义canverter的方法:

	/**
	 * Add {@link Converter Converters} and {@link Formatter Formatters} in addition to the ones
	 * registered by default.
	 */
	default void addFormatters(FormatterRegistry registry) {
	}

接下来,我们就可以定制Converter了

@Configuration
public class WebConfig implements 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;
                String[] split = source.split(",");
                Pet pet = new Pet();
                pet.setName(split[0]);
                pet.setAge(split[1]);
                return pet;
            }
        });
    }
}

测试:

技术分享图片

addFormatters源码

技术分享图片

SpringMVC:自定义Converter

原文:https://www.cnblogs.com/wwjj4811/p/14626400.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!