SpringMVC:自定义Converter
接着前一篇博客: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;
}
});
}
}
测试: