利用SpringMVC拦截器控制Controller返回值

原创 2014年09月28日 11:54:25

    背景:需求是在Controller中方法没有实现时,返回模拟结果。主要用于项目初期前台跟后台的交互,Web项目就是在前台发出请求然后后台响应并返回结果。本示例利用拦截器和注解实现跳过执行方法直接返回定义结构的功能。

    通过定义一个StringResult注解,在访问方法的时候返回StringResult中的内容。通过Debug注解来定义方法是否要返回StringResult中的内容。

Debug默认为TRUE

package com.tiamaes.dep.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Debug {
	boolean value() default true;
}


package com.tiamaes.dep.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface StringResult {
	String value();
}
定义好注解之后写拦截器类,拦截器需要实现HandlerInterceptor

package com.tiamaes.dep.interceptor;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.tiamaes.dep.annotation.Debug;
import com.tiamaes.dep.annotation.StringResult;

public class DebugInterceprot implements HandlerInterceptor {
	private boolean debug = true;
	
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		//首先判断是否是Debug模式(全局),如果否则使拦截器失效
		if(!this.debug) return true;
		
		if(handler instanceof HandlerMethod){
			HandlerMethod method = (HandlerMethod)handler;
			Debug isDebug = method.getMethodAnnotation(Debug.class);
			StringResult stringResult = method.getMethodAnnotation(StringResult.class);
			//如果没有@StringResult注解则跳过拦截
			//判断方法上注解的Debug值,如果否则不拦截
			if(stringResult==null||(isDebug !=null && isDebug.value() == false)){
				return true;
			}else{
				//拦截方法,并将stringResult中的内容返回给前台
				PrintWriter out = response.getWriter();
				out.print(stringResult.value());
			}
		}
		
		return false;
	}
	
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub

	}

	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub

	}

	public boolean isDebug() {
		return debug;
	}

	public void setDebug(boolean debug) {
		this.debug = debug;
	}
	
	

}
XML配置

    <mvc:interceptors>
    	<mvc:interceptor>
    		<mvc:mapping path="/**"/>
    		<bean class="com.tiamaes.dep.interceptor.DebugInterceprot">
    			<property name="debug" value="true"/>
    		</bean>
    	</mvc:interceptor>
    </mvc:interceptors>
Controller中的写法

package com.tiamaes.dep.system.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.tiamaes.dep.annotation.Debug;
import com.tiamaes.dep.annotation.StringResult;

@Controller

@RequestMapping("/test")
public class AspectTestController {

	@RequestMapping("/1")
	@ResponseBody
	//@Debug(false)
	@StringResult("Interceptor")
	public String test1(){
		
		return "The controller request!";
	}
}
此方法可用以在控制器中的方法没有写好的时候进行前台功能的测试,思路大概如此,更加强大的功能需要各位大神们开发。这个只是我的突发奇想,并没有实际在项目中试过。如果有人在项目中试了请告诉我效果,谢谢。

如果有人用了,建议保留StringResult注解,因为这个注解可以让你知道你的方法要返回一个什么样的结果。

敏捷是一条很长的路,摸索着前进着!!






版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Spring MVC使用ModelAndView进行重定向

1、Servlet重定向forward与redirect:使用servlet重定向有两种方式,一种是forward,另一种就是redirect。forward是服务器内部重定向,客户端并不知道服务器把...

springMVC之mvc:interceptors拦截器的用法

1.配置拦截器 在springMVC.xml配置文件增加:                        ...

SpringMVC 拦截返回值,并自定义

有关取代mvc:annotation-driven使用自定义配置请看: http://blog.csdn.net/cml_blog/article/details/45222431 1...

Spring boot配置拦截器

虽然Spring还用得不怎么熟,最近就开始折腾Spring boot 了,还是那句话,废话少说,直接上码吧:package com.jiaobuchong.springboot.interceptor...

Spring拦截器实现controller层json数据返回

Controller层的作用是处理业务逻辑并返回数据,那怎么返回数据呢?接口的请求通过HttpServletRequest和HttpServletResponse实现前后端的交互,ServletRes...

SpringMVC Interceptor中通过Request获取Controller方法

刚好遇到这个问题,找到了大牛的博客学习记录一下不是原创背景:项目使用spring 3.1.0.RELEASE,从dao到Controller层全部是基于注解配置。我的需求是想在自定义的Spring拦截...

SpringMVC学习(二)高级参数绑定,拦截器,controller方法返回值

一、高级参数绑定1,数组类型的参数绑定需求分析: 要求商品列表页面中的每个商品前有一个checkbook,选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id删除商品信息。j...

spring mvc Controller层拦截器配置教程代码实例

spring mvc Controller层拦截器配置教程代码实例 源代码下载地址:http://www.zuidaima.com/share/1825298701863936.htm

SpringMVC学习记录(七)--拦截器的使用

SpringMVC的请求如下面这种图所示: 可以看出所有的请求都要通过Dispatherservlet来接收,然后通过Handlermapping来决定使用哪个控制器,再根据ViewResolver...

SpringMVC中使用Interceptor拦截器顺序等

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)