背景:需求是在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注解,因为这个注解可以让你知道你的方法要返回一个什么样的结果。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍详解springmvc拦截器拦截静态资源,包括了详解springmvc拦截器拦截静态资源的使用技巧和注意事项,需要的朋友参考一下 springmvc拦截器interceptors springmvc拦截器能够对请求的资源路径进行拦截,极大的简化了拦截器的书写。但是,千万千万要注意一点:静态资源的放行。 上代码: 问题来了,在请求jsp页面的时候,你的静态资源的访问仍然会被自定义拦截器
本文向大家介绍详解SpringCloud Zuul过滤器返回值拦截,包括了详解SpringCloud Zuul过滤器返回值拦截的使用技巧和注意事项,需要的朋友参考一下 Zuul作为网关服务,是其他各服务对外中转站,通过Zuul进行请求转发。这就涉及到部分数据是不能原封返回的,比如服务之间通信的凭证,用户的加密信息等等。 举个例子,用户服务提供一个登录接口,用户名密码正确后返回一个Token,此To
本文向大家介绍详解Struts2拦截器机制,包括了详解Struts2拦截器机制的使用技巧和注意事项,需要的朋友参考一下 Struts2的核心在于它复杂的拦截器,几乎70%的工作都是由拦截器完成的。比如我们之前用于将上传的文件对应于action实例中的三个属性的fileUpload拦截器,还有用于将表单页面的http请求参数设置成action中对应的属性的param拦截器等。总之,在整个Struts
本文向大家介绍SpringMVC Controller 返回值的可选类型详解,包括了SpringMVC Controller 返回值的可选类型详解的使用技巧和注意事项,需要的朋友参考一下 spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void。 ModelAndView 通过ModelAndView构造方
本文向大家介绍SpringMVC中的拦截器详解及代码示例,包括了SpringMVC中的拦截器详解及代码示例的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是SpringMVC中的拦截器的介绍及实例代码,配置等内容,具体如下。 Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。本文主要总结一下springmvc中拦截器是如何定义
本文向大家介绍SpringMVC拦截器实现监听session是否过期详解,包括了SpringMVC拦截器实现监听session是否过期详解的使用技巧和注意事项,需要的朋友参考一下 本文主要向大家介绍了SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期的代码,具体如下: 一、拦截器配置 二、拦截器编码 三、总结 1.注意这里使用的拦截器是HandlerIntercepto