1. 程式人生 > 其它 >gin body 只能獲取一次的問題

gin body 只能獲取一次的問題

分析


實現

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>

結果