SpringMVC 拦截返回值,并自定义
来源:互联网 发布:学跳舞的软件 编辑:程序博客网 时间:2024/05/23 13:52
有关取代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> --><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean><!-- 采用SpringMVC自带的JSON转换工具,支持@ResponseBody注解 --><beanclass=" 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/jsonxml=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);@Overridepublic 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);}@Overridepublic 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")@ResponseBodypublic Result getTime( Integer id) {log.debug("==========>getTime,id:" + id);Result result=new Result();result.setA(1);return result;}action中设置了A的值为1,在页面上返回结果:
成功实现自定义返回信息。
1 0
- SpringMVC 拦截返回值,并自定义
- SpringMVC拦截器返回值不能自定义的解决办法
- JAVA项目做API,SpringMVC拦截异常并返回Json
- springMVC 自定义拦截器
- springmvc自定义拦截器
- SpringMVC 自定义拦截器
- springmvc自定义拦截器
- springMVC自定义拦截器
- springMVC 自定义拦截器
- springMVC 自定义拦截器
- SpringMvc自定义拦截器
- SpringMVC自定义拦截器
- SpringMvc自定义拦截器
- SpringMVC自定义拦截器
- SpringMVC 自定义拦截器
- 【SpringMVC】自定义拦截器
- springMVC自定义拦截器
- apache cxf服务端拦截器拦截客户端并中断返回自定义消息
- 简述word转换成pdf的过程
- effective c++ 条款06 不想编辑器生成,明确拒绝
- 批处理文件删除注册表数据
- [Hadoop源码解读](一)MapReduce篇之InputFormat
- hitTest和pointInside如何响应用户点击事件
- SpringMVC 拦截返回值,并自定义
- C和指针读书笔记-第6章(指针)
- struts2 if 标签判断字符串
- 怎样正确的工作
- http://www.blogjava.net/easywu/archive/2013/10/17/405386.html
- java 将pdf多页转换成一张图片,支持指定页数
- 《剑指Offer》面试题25:二叉树中和为某一值的路径
- 10个Eclipse调试技巧
- Unity2d 骨骼动画3:介绍Mecanim和脚本