gin body 只能獲取一次的問題
阿新 • • 發佈:2022-05-06
分析
實現
1.後端controller
package com.czy.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/user") public class UserController { @RequestMapping("/testInterceptor") public String testInterceptor(){ System.out.println("testInterceptor執行了..."); return "success"; } }
2.編寫攔截器類(實現HandlerInterceptor介面)
攔截器1
package com.czy.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 自定義攔截器 */ public class MyInterceptor1 implements HandlerInterceptor { /** * 預處理,controller方法執行前 * return true 放行,執行下一個攔截器,如果沒有,執行controller中的方法 * return false 不放行,無法執行controller */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("攔截器執行了...前111"); /*request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);*/ return true; } /** * 後處理的方法,controller方法執行後,success.jsp執行前 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("攔截器執行了...後111"); //跳轉後success.jsp頁面與afterCompletion也會執行,但我們只會看到跳轉頁面 /*出錯了也可進行頁面跳轉:request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);*/ } /** * success.jsp執行後,該方法會執行,此方法不能跳轉頁面 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("攔截器執行了...最後111"); } }
攔截器2
package com.czy.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 自定義攔截器 */ public class MyInterceptor2 implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("攔截器執行了...前222"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("攔截器執行了...後222"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("攔截器執行了...最後222"); } }
3.配置攔截器
<!--配置攔截器-->
<mvc:interceptors>
<!--配置多個攔截器-->
<mvc:interceptor>
<mvc:mapping path="/user/*"/> <!--攔截的具體方法-->
<!--<mvc:exclude-mapping path=""/>--> <!--不攔截的方法-->
<bean class="com.czy.interceptor.MyInterceptor1"></bean> <!--配置攔截器物件-->
</mvc:interceptor>
<!--配置第二個攔截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.czy.interceptor.MyInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>