全网整合营销服务商

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

免费咨询热线: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 


相关文章: 深圳网站制作的公司有哪些,dido官方网站?  公众号网站制作网页,微信公众号怎么制作?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  音乐网站服务器如何优化API响应速度?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  北京企业网站设计制作公司,北京铁路集团官方网站?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  官网网站制作腾讯审核要多久,联想路由器newifi官网  焦点电影公司作品,电影焦点结局是什么?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  建站主机CVM配置优化、SEO策略与性能提升指南  网站制作报价单模板图片,小松挖机官方网站报价?  详解jQuery停止动画——stop()方法的使用  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Python如何创建带属性的XML节点  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何通过智能用户系统一键生成高效建站方案?  Swift中循环语句中的转移语句 break 和 continue  高防服务器如何保障网站安全无虞?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何在IIS中新建站点并配置端口与物理路径?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  广平建站公司哪家专业可靠?如何选择?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  建站上市公司网站建设方案与SEO优化服务定制指南  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  香港服务器选型指南:免备案配置与高效建站方案解析  制作网站的模板软件,网站怎么建设?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  如何快速搭建安全的FTP站点?  如何登录建站主机?访问步骤全解析  如何选择PHP开源工具快速搭建网站?  如何通过可视化优化提升建站效果?  如何快速查询网址的建站时间与历史轨迹?  建站之星如何优化SEO以实现高效排名?  在线教育网站制作平台,山西立德教育官网?  建站之星如何配置系统实现高效建站?  香港服务器租用每月最低只需15元?  宝塔面板如何快速创建新站点?  如何快速搭建FTP站点实现文件共享?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何通过FTP空间快速搭建安全高效网站?  为什么Go需要go mod文件_Go go mod文件作用说明  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  招贴海报怎么做,什么是海报招贴?  建站之星后台管理系统如何操作?  如何通过二级域名建站提升品牌影响力? 

您的项目需求

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