全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

背景:需求是在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拦截controller  # spring  # 拦截返回值  # springmvc  # SpringBoot全局Controller返回值格式统一  # Spring MVC Controller返回值及异常的统一处理方法  # SpringMVC Controller 返回值的可选类型详解  # 详解springmvc之json数据交互controller方法返回值为简单类型  # SpringController返回值和异常自动包装的问题小结  # 拦截器  # 跳过  # 是在  # 让你  # 告诉我  # 用了  # 大神  # 并将  # 如果没有  # 试过  # 主要用于  # 试了  # 写好  # 大家多多  # 默认为  # 判断是否  # 器中  # 就是在  # default  # true 


相关文章: 如何用好域名打造高点击率的自主建站?  如何设置并定期更换建站之星安全管理员密码?  黑客入侵网站服务器的常见手法有哪些?  建站主机是否属于云主机类型?  在线制作视频网站免费,都有哪些好的动漫网站?  定制建站流程解析:需求评估与SEO优化功能开发指南  python的本地网站制作,如何创建本地站点?  建站主机选哪种环境更利于SEO优化?  ,网站推广常用方法?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  定制建站方案优化指南:企业官网开发与建站费用解析  如何用已有域名快速搭建网站?  制作门户网站的参考文献在哪,小说网站怎么建立?  香港服务器WordPress建站指南:SEO优化与高效部署策略  济南网站制作的价格,历城一职专官方网站?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  建站之星下载版如何获取与安装?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何在云指建站中生成FTP站点?  如何高效配置IIS服务器搭建网站?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  建站之星如何防范黑客攻击与数据泄露?  如何挑选优质建站一级代理提升网站排名?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何正确选择百度移动适配建站域名?  如何通过智能用户系统一键生成高效建站方案?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何注册花生壳免费域名并搭建个人网站?  大同网页,大同瑞慈医院官网?  如何通过cPanel快速搭建网站?  如何在Windows虚拟主机上快速搭建网站?  如何撰写建站申请书?关键要点有哪些?  如何配置支付宝与微信支付功能?  如何快速生成橙子建站落地页链接?  建站之星后台密码遗忘如何找回?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何通过虚拟主机快速完成网站搭建?  如何在阿里云完成域名注册与建站?  建站之星后台密码如何安全设置与找回?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何用PHP快速搭建高效网站?分步指南  建站之星如何优化SEO以实现高效排名?  制作网站外包平台,自动化接单网站有哪些?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  建站之星如何开启自定义404页面避免用户流失?  网站制作服务平台,有什么网站可以发布本地服务信息?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。