其实是SpringMVC的原理
正学到SpringBoot,就记录一下,使用SpringBoot怎么自定义类型转换器

SpringMVC给自定义类封装参数使用的是ServletModelAttributeMethodProcessor参数处理器,WebDateBinder:Web数据绑定器,作用是将请求参数的值绑定到javabean中

绑定器中的conversionService属性的类型是WebConversionService类,在这个类中有converters属性存放很多类型转换器,这些类型转换器指定将string类型转换成integer或者data或者其他类型数据,通过这些转换器,将前端传过来的各个数据转成自定义对象属性需要的类型从而进行封装数据,

在SpringBoot中要想使用自定义类型转换器就需要定制化SpringMVC,通过配置WebMvcConfigurer组件

自定义类型转换器

public class MyConverter implements Converter<String, Teacher> {
    @Override
    public Teacher convert(String source) {
        Teacher teacher = new Teacher();
        if (source.contains(",")){
            String[] strings = source.split(",");
            teacher.setTeacherName(strings[0]);
            teacher.setTeacherAge(Integer.valueOf(strings[1]));
            teacher.setSalary(Double.valueOf(strings[2]));
        }
        System.out.println("类型转换器中"+teacher);
        return teacher;
    }
}

注册WebMvcConfigurer,定制化SpringMVC

@Component
public class MyConfig {
    /*配置WebMvcConfigurer,定制化SpringMVC的功能*/
    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {
            /*配置自定义WebConversionService,做自定义类型转换器*/
            @Override
            public void addFormatters(FormatterRegistry registry) {
                registry.addConverter(new MyConverter());
            }
        };
    }

前端页面

<form action="teacher" method="post">
    <input type="text" name="teacherInfo" placeholder="输入老师信息以|间隔">
    <input type="submit" value="转换">
</form>

前端表单teacherinfo值为:茜茜,18,123.456

即可完成从字符串到整个Teacher对象的封装

后端控制器

@Controller
public class TeacherController {

    /*自定义类型封装,使用自定义类型转换器*/
    @PostMapping(value = "/teacher")
    @ResponseBody
    public Map testConverter(@RequestParam(value = "teacherInfo") Teacher teacher){
        System.out.println(teacher);
        HashMap<String, Object> map = new HashMap<>();
        map.put("teacher",teacher);
        return map;
    }
}

以上就是自定义类型转换器的配置,记下,防止自己老年痴呆。