当对于页面请求过来的数据Spingboot自带的124个convert不满足我们的需求,即我们需要进行特殊的分解规则的时候就可以自定义一个convert
那么如何自定义呢,可以通过向springboot容器放入一个WebMvcConfigurer,进入这个类,我们可以重写很多方法,其中包括定制化springmvc的很多方法,下面这个就是自定义convert的相关方法
样例:
Person类
@Data
public class Person {
public String username;
public Integer age;
public Pet pet;
}
Pet类
@Data
public class Pet {
public String name;
public Integer age;
}
form表单
如果按照注释的掉的代码写,那么会被Springboot自带的convert解析,这里我们自己定义一个convert
<form action="/saveuser" method="post">
姓名:<input name="username" value="张三"/>
年龄:<input name="age" value="18"/>
生日:<input name="birth" value="2019/12/20">
<!-- <input name="pet.name" value="阿猫">-->
<!-- <input name="per.age" value="3">-->
宠物:<input name="pet" value="阿狗,3">
<input type="submit" value="保存">
</form>
Controller
直接将person返回到网页打印
@PostMapping("/saveuser")
public Person saveuser(Person person) {
return person;
}
自定义convert
@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)) {
Pet pet = new Pet();
String[] split = source.split(",");
pet.setName(split[0]);
pet.setAge(Integer.parseInt(split[1]));
return pet;
}
return null;
}
});
}
};
}
运行测试