有关取代mvc:annotation-driven使用自定义配置请看:

http://blog.csdn.net/cml_blog/article/details/45222431

1、在项目开发中,自定义全局返回值拦截是非常实用的,就如在Struts2的拦截器中,可以根据Action的返回值自定义返回信息,如果返回SUCCESS就统一返回一个成功的json对象,如果FAIL就返回全局的定义信息

2、配置xml:

<context:component-scan base-package="com.cml.mvc.*" />

	<!-- 取代mvc:annotation-driven> -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</bean> <!-- 采用SpringMVC自带的JSON转换工具,支持@ResponseBody注解 -->
<bean
class=" org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<!-- 自定义返回值拦截 -->
<property name="responseBodyAdvice">
<list>
<bean class="com.cml.mvc.base.MyResponseBodyAdvice"></bean>
</list>
</property>
<!-- 自定义返回值校验 -->
<property name="customReturnValueHandlers">
<list>
<bean class="com.cml.mvc.base.MyReturnValues"></bean>
</list>
</property> <!-- 注入全局的propertiesEditor -->
<property name="webBindingInitializer">
<bean class="com.cml.mvc.base.BaseWebBindingInital">
<property name="timeFormatter" value="yyyy-MM-dd HH:mm:ss"></property>
</bean>
</property>
<property name="contentNegotiationManager" ref="contentNegotiationManager"></property>
</bean>
<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="contentNegotiationManager"
class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
<property name="favorParameter" value="true" />
<property name="mediaTypes">
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean> <!-- 取代mvc:annotation-driven> end -->

2、自定义返回值拦截类,只要实现 org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice接口即可

package com.cml.mvc.base;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import com.cml.mvc.beans.Result; public class MyResponseBodyAdvice implements ResponseBodyAdvice<Result> { private static Log log = LogFactory.getLog(MyResponseBodyAdvice.class); @Override
public boolean supports(MethodParameter returnType,
Class<? extends HttpMessageConverter<?>> converterType) {
log.debug("MyResponseBodyAdvice==>supports:" + converterType);
log.debug("MyResponseBodyAdvice==>supports:" + returnType.getClass());
log.debug("MyResponseBodyAdvice==>supports:"
+ MappingJackson2HttpMessageConverter.class
.isAssignableFrom(converterType));
return MappingJackson2HttpMessageConverter.class
.isAssignableFrom(converterType);
} @Override
public Result beforeBodyWrite(Result body, MethodParameter returnType,
MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) { log.debug("MyResponseBodyAdvice==>beforeBodyWrite:" + returnType + ","
+ body);
body.setB("我是后面设置的");
return body;
} }

3、controller中只要返回自定义的Result对象,就可以拦截到转换信息,controller代码

       @RequestMapping("/times")
@ResponseBody
public Result getTime( Integer id) { log.debug("==========>getTime,id:" + id);
Result result=new Result();
result.setA(1);
return result;
}

action中设置了A的值为1,在页面上返回结果:



成功实现自定义返回信息。

SpringMVC 拦截返回值,并自定义的更多相关文章

  1. SpringMVC Controller 返回值几种类型

    SpringMVC Controller 返回值几种类型 2016年06月21日 19:31:14 为who而生 阅读数:4189 标签: Controller 返回值类型spring mvc 更多 ...

  2. C#提高--------------获取方法返回值的自定义特性(Attribute)

    .NET(C#):获取方法返回值的自定义特性(Attribute) 转载 2013年05月08日 10:54:42 1456 来自:http://www.cnblogs.com/mgen/archiv ...

  3. SpringMVC核心——返回值问题

    一.SpringMVC 使用 ModelAndView 来处理返回值问题. 1.ModelAndView 官方描述: Holder for both Model and View in the web ...

  4. springmvc 之 返回值

    springMVC对于controller处理方法返回值的可选类型 spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, Stri ...

  5. SpringMVC Controller 返回值的可选类型

    spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMap ...

  6. loadrunner-获取返回值和自定义参数(参数运算)

    实例:手机端操作,A新增了一条事件(返回结果:事件id,例如:1), A这时需要获取新增产生的事件id,并作为参数进行传递,才能将这条事件上报给B(返回结果:事件id不变,步骤id等于事件id加1), ...

  7. 转SpringMVC Controller 返回值的可选类型

    spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMap ...

  8. spring mvc 第三天【注解实现springmvc Handler返回值为Object 的配置】

    这里使用的是在前台发起请求Handler,后台伪造数据响应给前台, 解决方案:将之前的viewResolver抹掉,配置对应(request)请求的Handler信息如下 之前Handler返回的都直 ...

  9. SpringMVC拦截器与SpringBoot自定义拦截器

    首先我们先回顾一下传统拦截器的写法: 第一步创建一个类实现HandlerInterceptor接口,重写接口的方法. 第二步在XML中进行如下配置,就可以实现自定义拦截器了 SpringBoot实现自 ...

随机推荐

  1. jmeter 聚合报告参数解释

    label:每个请求的名称 样本:发送给服务器的请求数量 平均值:平均响应时间,默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以T ...

  2. Spring5:概念

    1.Spring优点 spring是一个开源的免费的框架 spring是一个轻量级的 非入侵式的框架 控制反转(IOC).面向切面(AOP) 支持事务的处理,对框架整合的支持 **总之:spring就 ...

  3. [源码分析] 带你梳理 Flink SQL / Table API内部执行流程

    [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 目录 [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 0x00 摘要 0x01 Apac ...

  4. 基于Neo4j的个性化Pagerank算法文章推荐系统实践

    新版的Neo4j图形算法库(algo)中增加了个性化Pagerank的支持,我一直想找个有意思的应用来验证一下此算法效果.最近我看Peter Lofgren的一篇论文<高效个性化Pagerank ...

  5. 解决centos ping不通外网

    先确认三件事: 一.ip 二.网关 三.dns 一就不说了,设置好本地ip和掩码就行了,二网关   添加默认网关,命令:route add defaule gw 192.168.1.1 这是 你用ro ...

  6. js获取数组中最大值

    1.es6拓展运算符... Math.max(...arr) 2.es5 apply(与方法1原理相同) Math.max.apply(null,arr) 3.for循环 let max = arr[ ...

  7. Mac安装aws-cli全过程,通过命令行上传文件到aws s3协议服务器

    第一次使用aws,首先查询了各种资料,我第一步需要做的是安装aws-cli,而安装aws-cli之前需要安装python3,当然你安装python3之前你还需要安装homebrew,当然我正在安装的过 ...

  8. Javascript-异步详解

  9. php原生函数应用

    php常见基本的函数 一.字符串函数 implode — 将一个一维数组的值转化为字符串 lcfirst — 使一个字符串的第一个字符小写 ltrim — 删除字符串开头的空白字符(或其他字符) rt ...

  10. view-controller

    有的时候我们只想根据一个请求地址跳转到一个页面中,中间并没有任何的处理流程,这个时候创建一个 Controller 类再编写方法来跳转就显得很繁琐.这个时候我们就可以使用 view-controlle ...