RequestMappingHandlerAdapter配置

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

RequestMappingHandlerAdapter配置

 RequestMappingHandlerAdapter配置_第1张图片

RequestMappingHandlerAdapter:适配@RequestMapping注释的Controller方法处理Http Request请求,返回Response

 

RequestMappingHandlerAdapter 主要工作是解析请求参数和处理返回值,处理过程中可配置:

可配置的属性字段

字段说明

备注

argumentResolvers

参数解析器

List

customArgumentResolvers

自定义参数解析器,排在内置解析器后面

List

returnValueHandlers

返回值处理器

List

CustomReturnValueHandlers

自定义返回值处理器,排在内置处理器后面

List

webBindingInitializer

每个WebDataBind的全局初始化器,参数解析器会用WebDataBind进行Bean类字段填充和类型转换,

WebBindingInitializer

messageConverters

参数解析器和返回值处理器中使用到的requestresponsebody类型转换器HttpMessageConverter

List>

initBinderArgumentResolvers

@InitBinder注解的方法的参数解析器

个性化配置每个请求的WebDataBinder

contentNegotiationManager

内容协商管理器 用于决定media type

处理ajax特殊情况时可能会用到

synchronizeOnSession

是否在执行时同步session,从而保证该会话的用户串行访问该控制器。

等等其他一些属性

 

 customArgumentResolvers

项目工程里配置的自定义解析器有:CustomSessionArgumentResolver

 RequestMappingHandlerAdapter配置_第2张图片

用法:

RequestMappingHandlerAdapter配置_第3张图片

获取Session的属性赋值给@CustomSessionArgument注解的对象。

 

使用到自定义解析器: RequestMappingHandlerAdapter配置_第4张图片

webBindingInitializer

webBindingInitializer

是每个WebDataBind的全局初始化器,用来配置WebDataBind

 

WebDataBindrequest请求里的数据绑定(注入)Bean类里,包括类型转换、校验和绑定结果分析。

 

springWebBindingInitializer提供了一个便捷的实现类用来配置WebDataBinde:

org.springframework.web.bind.support.ConfigurableWebBindingInitializer,其中配置属性如下:

 

propertyEditorRegistrars

类型转换,3.0之前方法

PropertyEditorRegistrar[]

conversionService

类型转换,3.0之后的方法

ConversionService

autoGrowNestedPaths

如果注入的值为null,是否注入默认值,默认为true

boolean

bindingErrorProcessor

数据绑定错误处理器

BindingErrorProcessor

directFieldAccess

是否直接使用Field反射注入值,还是用setter注入值,默认为false

boolean

messageCodesResolver

绑定的错误信息生成错误信息编码

MessageCodesResolver

validator

对象校验器

Validator

 

WebDataBind的可配置属性如下图所示,包含ConfigurableWebBindingInitializer提供配置项

RequestMappingHandlerAdapter配置_第5张图片

 

 

其中类型转换有2种方式:1PropertyEditor2ConversionService;

在这个类方法里可以看到

org.springframework.beans.TypeConverterDelegate.convertIfNecessary(String propertyName, Object oldValue, Object newValue, Class<T> requiredType, TypeDescriptor typeDescriptor)

内部首先查找PropertyEditor进行类型转换,如果没有找到相应的PropertyEditor再通过ConversionService进行转换。

 

propertyEditorRegistrars

用来注册PropertyEditor

内部注册的PropertyEditor见:

org.springframework.beans.PropertyEditorRegistrySupport.createDefaultEditors()方法,里面注册的转换器有基本数据类型和常用类,可以另外注册覆盖默认配置。

 RequestMappingHandlerAdapter配置_第6张图片

 

ConversionService

spring提供一个FormattingConversionServiceFactoryBean来生成ConversionService的实现类DefaultFormattingConversionService用来注册Converter,Formatter以及执行类型转换

 

FormattingConversionServiceFactoryBean的可配置:

converters

注册Converter

Set,类型可以是Converter, ConverterFactory,

GenericConverter

formatters

注册formatters

Set, 类型可以是Formatter,

AnnotationFormatterFacotry

formatterRegistrars

注册

Converter,

formatters

Set

registerDefaultFormatters

是否要注册默认的Formatter

boolean

embeddedValueResolver

 RequestMappingHandlerAdapter配置_第7张图片

 

messageConverters

参数解析器和返回值处理器中使用到的requestresponsebody类型转换器HttpMessageConverter

 

在使用@RequestBody@ResponseBody注解时用到,会根据转换类型和mediaType查找最合适的HttpMessageConverter

 

常用到的2HttpMessageConverter:

1)StringHttpMessageConverter:String类型和报文body的转换

2)MappingJackson2HttpMessageConverter: Bean类型或Map类型和报文Body的转换,可以使用ObjectMapper配置具体的转换规则。同意提供了Jackson2ObjectMappingerFactoryBeanFactoryBean来初始化生产者ObjectMapper。具体配置可见:org.codehaus.jackson.map.DeserializationConfig.Featureorg.codehaus.jackson.map.SerializationConfig.Feature

 RequestMappingHandlerAdapter配置_第8张图片 

 

RequestMappingHandlerAdapter配置_第9张图片

 

参考材料

说说Spring里的WebDataBinder : http://www.cnblogs.com/AloneSword/p/3998943.html

spring数据类型转换:http://www.iteye.com/topic/1123319

 

感觉在过API

 

 

转载于:https://my.oschina.net/braveCS/blog/625506

你可能感兴趣的:(RequestMappingHandlerAdapter配置)