SpringMVC 拦截返回值,并自定义

有关取代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,在页面上返回结果:

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

时间: 2024-10-13 13:05:34

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

springmvc 之 返回值

springMVC对于controller处理方法返回值的可选类型 spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMapping("/hello") public ModelAndView helloWorld() { String message = "Hello World, Spring 3.x!"; return

SpringMVC基础——返回值问题

一.SpringMVC 使用 ModelAndView 来处理返回值问题. 1.ModelAndView 官方描述: Holder for both Model and View in the web MVC framework.Note that these are entirely distinct. This class merely holdsboth to make it possible for a controller to return both modeland view in

SpringMVC Controller 返回值的可选类型

spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMapping("/hello") public ModelAndView helloWorld() { String message = "Hello World, Spring 3.x!"; return new ModelAndView("hello"

Springmvc+ajaxsubmit()返回值的问题

纠结了一下午,ajax提交form的时候总是不调success的函数,后来才知道是返回值类型的问题,前台定义的datatype是json, 而我后台返回的是一个String,所以调了error的函数,所以需要返回一个Json的对象 可是我只需要返回一个String,查了一下发现用下面的形式可以解决 $("#form").ajaxSubmit(function(result) {      alert(result);   });

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

实例:手机端操作,A新增了一条事件(返回结果:事件id,例如:1), A这时需要获取新增产生的事件id,并作为参数进行传递,才能将这条事件上报给B(返回结果:事件id不变,步骤id等于事件id加1),B需要获取上报返回的事件id和步骤id才能办理这条事件. 一方法,如果两个返回的id都在loadrunner返回结果中显示(view-Test Results或者Tree视图中可以查看): 这时可以使用web_reg_save_param函数通过左右边界值的方式,定位到所需要的id,然后直接赋值给一

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

这里使用的是在前台发起请求Handler,后台伪造数据响应给前台, 解决方案:将之前的viewResolver抹掉,配置对应(request)请求的Handler信息如下 之前Handler返回的都直接就是逻辑视图名,并且需要配置相对应的固定的视图解析器,不太方便,这次需要返回Object,使Handler更灵活. 既然return 之后的值不再是逻辑视图名称了,那么就让@ResponseBody来帮忙吧 这里有两个新的注解: @RequestBody 将HTTP请求正文转换为适合的HttpMe

SpringMVC返回值类型及响应数据类型

1.SpringMVC 和 Struts2 的优略分析 共同点: 它们都是表现层框架,都是基于 MVC 模型编写的. 它们的底层都离不开原始 ServletAPI. 它们处理请求的机制都是一个核心控制器. 区别: Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter. Spring MVC 是基于方法设计的,而 Struts2 是基于类,Struts2 每次执行都会创建一个动作类.所以 Spring MVC 会稍微比 Struts2 快些. Spring MVC

WebApiTestClient自定义返回值说明

WebApiTestClient是基于微软HelpPage一个客户端调试扩展工具,用来做接口调试比较方便.但是对返回值的自定义说明还是有缺陷的.有园友写过一篇文章,说可以通过对类进行注释,然后通过在IHttpActionResult上标记ResponseType(typeof(class))即可. [ResponseType(typeof(CreditRuleDetails))] public IHttpActionResult GetCreditRuleList(int ruleType =

SpringMVC学习笔记三:Controller的返回值

springMVC的返回值有ModelAndView,String,void,Object类型 项目目录树: 该项目是在前面项目的基础上修改的,这里的pom.xml文件需要加入使用到的包,应为@ResponseBody需要使用的包 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version&