【问题标题】:Regarding reading POST method parameter in Interceptor关于在 Interceptor 中读取 POST 方法参数
【发布时间】:2018-11-24 02:52:02
【问题描述】:

我对控制器、拦截器和服务有以下配置。

package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.example.demo.interceptor.LogInterceptor;

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer  {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LogInterceptor());

        }

    }


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MineController {

    @RequestMapping(value = { "/", "/test" })
    public String test(Model model) {
        System.out.println("-------- MainController.login Test --- ");
        return "test";
    }

    @RequestMapping(value = { "admin/myLogin" })
    public String oldLogin(Model model) {
        System.out.println("-------- MainController.login old login --- ");
        return "login";
    }

    @RequestMapping(value = { "admin/newLogin" })
    public String newLogin(Model model) {
        System.out.println("-------- MainController.login New login --- ");
        return "login";
    }

}

package com.example.demo.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class LogInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        long startTime = System.currentTimeMillis();
        System.out.println("\n-------- LogInterception.preHandle --- ");
        System.out.println("Request URL: " + request.getRequestURL());
        System.out.println("Request Parameter: " + request.getParameter("name"));
        System.out.println("Start Time: " + System.currentTimeMillis());

        request.setAttribute("startTime", startTime);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {

        System.out.println("\n-------- LogInterception.postHandle --- ");
        System.out.println("Request URL: " + request.getRequestURL());

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        long startTime = System.currentTimeMillis();
        System.out.println("\n-------- LogInterception.afterCompletion --- ");
        System.out.println("Request URL: " + request.getRequestURL());
        System.out.println("Start Time: " + System.currentTimeMillis());

        request.setAttribute("startTime", startTime);
    }

}


package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan("com.example.demo.*")
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

当我尝试访问 name POST 请求的 requestParameter.It's give me null.

请帮助我如何在 Interceptor 中获取该参数值。?

【问题讨论】:

    标签: java spring-mvc spring-boot jakarta-ee interceptor


    【解决方案1】:

    将您的 WebMvcConfig 更改为如下所示;

    package com.example.demo.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    import com.example.demo.interceptor.LogInterceptor;
    
    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer  {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            InterceptorRegistration registration = registry.addInterceptor(new LogInterceptor());
            registration.addPathPatterns("/**"); // Or any specific path pattern
        }
    
    }
    

    【讨论】:

    • 为什么?配置对我来说正常工作。在 GET 方法的情况下,即使 Interceptor 也能正常工作。只有当我尝试使用 POST 方法时才会出现问题,然后我无法获得该参数值。
    • 你在吗??我在等你的回复。
    猜你喜欢
    • 2013-06-19
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    相关资源
    最近更新 更多