Spring mvc:annotation-driven

来源:互联网 发布:淘宝开网店用18 编辑:程序博客网 时间:2024/05/16 18:20
<mvc:annotation-driven>        <mvc:message-converters register-defaults="true">            <!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->            <bean class="org.springframework.http.converter.StringHttpMessageConverter">                <constructor-arg value="UTF-8"/>            </bean>            <!-- 将Jackson2HttpMessageConverter的默认格式化输出设为true -->            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">                <property name="prettyPrint" value="true"/>            </bean>        </mvc:message-converters> </mvc:annotation-driven>


如果在spring-mvc。xml文件中配置了mvc:annotation-driven 那么服务器启动的时候会创建一个

RequestMappingHandlerAdapter对象

RequestResponseBodyMethodProcessor

@Configurationpublic class WebMvcConfiguration extends WebMvcConfigurationSupport {/** * 改变ReturnValueHandlers的顺序<br> * 加入自定义RequestResponseBodyMethodProcessorExt * {@link ServletInvocableHandlerMethod#invokeAndHandle(org.springframework.web.context.request.ServletWebRequest, org.springframework.web.method.support.ModelAndViewContainer, Object...) *  * @link HandlerMethodReturnValueHandlerComposite#getReturnValueHandler(MethodParameter)} */@SuppressWarnings("unchecked")public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {RequestMappingHandlerAdapter handlerAdapter = super.requestMappingHandlerAdapter();//List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();StringHttpMessageConverter strConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));//MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();//jacksonConverter.setPrettyPrint(true);messageConverters.add(strConverter);//messageConverters.add(jacksonConverter);// 需要传入参数HttpMessageConverter列表RequestResponseBodyMethodProcessorExt processor = new RequestResponseBodyMethodProcessorExt(messageConverters);try {Method getDefaultReturnValueHandlers = handlerAdapter.getClass().getDeclaredMethod("getDefaultReturnValueHandlers");getDefaultReturnValueHandlers.setAccessible(true);List<HandlerMethodReturnValueHandler> defaultReturnValueHandlers = (List<HandlerMethodReturnValueHandler>) getDefaultReturnValueHandlers.invoke(handlerAdapter);defaultReturnValueHandlers.add(0, processor);handlerAdapter.setReturnValueHandlers(defaultReturnValueHandlers);} catch (Exception e) {e.printStackTrace();}return handlerAdapter;}}
如果我在程序中又配置另一个WebMvcConfigurationSupport 

会导致创建两个RequestMappingHandlerAdapter对象,从而使WebMvcConfigurationSupport 子类里面的设置无效



0 0