java - 关于在 Interceptor 中读取 POST 方法参数
问题描述
我对控制器、拦截器和服务有以下配置。
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 时,它给我 null。
请帮助我如何在拦截器中获取该参数值。?
解决方案
将您更改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
}
}
推荐阅读
- python - 用于查找字符串中最短单词总数的 Python 代码。
- java - JavaFX 中的 Platform.runLater 太慢了
- c# - 将数据从 datagridview 导出为 excel 格式
- reactjs - 显示重复名称的数量 ReactJS
- python - certbot nginx 网站不工作后
- c++ - 从 libevent 调用 evtimer_del 后,valgrind 发现内存泄漏
- listbox - 在列表框中选择项目时填充标签
- asynchronous - OSGi PushStream 很慢
- scala - 根据列中的最大值过滤火花数据帧中的行的最有效方法
- spring - 在多线程环境中,连接池级别的preparedstatement缓存是否比在jdbc驱动程序级别设置缓存更好?