2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器

表单提交上来的值都是通过HTTP协议传过来,认为万物都是文本,比如age=18

但是实际上Bean上标记了@Data,  controller方法里标记了@RestController会自动解析出 18是个整型,原理在于 ModelAttributeMethodProcessor里的public final Object resolveArgument()

   1.web数据解析工厂binderFactory

WebDataBinder binder = binderFactory.createBinder(webRequest, attribute, name);

  2.binder两个携带数据位置:target和conversionService

    2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第1张图片

 3conversionService中124个converters,包含把字符串转成数字转换器

2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第2张图片

2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第3张图片 

 2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第4张图片

 2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第5张图片

2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第6张图片 2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第7张图片

 2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第8张图片

 2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第9张图片

 2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第10张图片

 

 进一步查看每个转换器的类

2-12 补充解析原理补充 WebDataBinder binder 124个基本类型数据转换器_第11张图片

 

{GenericConverter$ConvertiblePair@7252} "java.lang.String -> java.lang.Integer" -> {GenericConversionService$ConvertersForPair@7253} "java.lang.String -> @org.springframework.format.annotation.NumberFormat java.lang.Integer: org.springframework.format.number.NumberFormatAnnotationFormatterFactory@3dffb2a8"

你可能感兴趣的:(java,servlet,前端)