表单提交上来的值都是通过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
3conversionService中124个converters,包含把字符串转成数字转换器
进一步查看每个转换器的类
{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"