java - spring boot HandlerInterceptor的HttpServletRequest.getParameter()返回null
问题描述
我正在覆盖 Spring Boot HandlerInterceptor 的 preHandle() 方法。当我在 HttpServletRequest 请求上调用 getParameter() 方法时,它返回 null。
@Component
@Slf4J
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws Exception {
log.info("age::{}",request.getParameter("age"));
return HandlerInterceptor.super.preHandle(request, response, handler);
}
}
控制器类...
@RestController
@Slf4J
public class Controller {
@PostMapping("/test")
public void test(@RequestBody Person person){
log.info("in test method");
}
}
来...
@Data
public class Person {
private Integer age;
}
json 正文....
{"age":"34"}
输出:
age:: null
Body 存在于 HttpServletRequest 中。我已经使用 bufferReader 和 getContentLength() 对其进行了验证,但无法通过 getParameter() 访问它。
我已经浏览了下面的堆栈溢出链接
HttpServletRequest.getParameter() 返回 null
http://natch3z.blogspot.com/2009/01/read-request-body-in-filter.html
这些都有助于从请求正文中提取数据,但需要编写大量自定义代码。spring 是否提供了任何解决方案,我可以直接使用它来访问参数值。
为什么 getParameter() 返回 null,我们如何直接访问数据?
解决方案
我已经以其他方式解决了这个问题。
我用过apache的IOUtils,org.apache.commons.io.IOUtils
String data = IOUtils.toString(request.getReader());
Person person = new ObjectMapper().readValue(data, Person.class);
这解决了我的问题,但我仍然觉得这是一种解决方法,因为 getParameter() 应该为我认为的键返回适当的值。
推荐阅读
- java - 取消对 JAVA JSP 的预订
- wordpress - 如何在 Github 上安装 WordPress 网站
- swift - 在 Swift 4 上使用 Starscream 通过 Websocket 发送文件
- python - 熊猫数据框减法
- reporting-services - 数据集查询更改时 SSRS 更新报告
- asp.net - ASP.NET MVC 5 - 从同一网络中的电话/PC 访问 localhost
- java - 从 pentaho 勺子读取 jboss 访问日志
- timezone - 使用 Moment.js 将 ISO 字符串转换为 PST
- swift - RxSwift 中的乐观 UI 更新
- matlab - 在matlab中从几分钟到几小时重新采样多个数据列