在同一个Controller方法中使用@RequestBody和HttpServletRequest

问题描述 投票:2回答:1

我有一种情况,我必须在处理它之前更新请求。基本上,我将不得不用一个随时间变化的属性来更新请求。要求消费者发送属性以及请求是不切实际的。所以,我觉得唯一的方法就是在处理它之前用控制器方法更新请求。

@RequestMapping(value="/**", method=RequestMethod.POST)
public void processRequest(HttpServletRequest servletRequest, HttpServletResponse response )

直到现在,HttpServletRequest用于控制器方法。然后将请求作为流读取,然后转换为json字符串以进行处理。我想用@RequestBody替换它,并将请求读入pojo,然后更新,然后处理。但是,我还需要来自HttpServletRequest的pathInfo来识别我需要处理请求的uri。

那么,我可以在同一个方法中同时使用@RequestBody和HttpServletRequest吗?我尝试了,我发现任何问题..但是,我想检查是否有任何我想念的东西..

@RequestMapping(value="/**", method=RequestMethod.POST)
public void processRequest(@RequestBody final DateRequest request, HttpServletRequest servletRequest, HttpServletResponse response )

请指教..

spring rest
1个回答
2
投票

这很好,并得到Spring的支持。事实上,我刚刚编写了一个几乎与您在示例中使用的控制器方法完全相同的控制器方法。 Spring对于使用@RequestMapping装饰的方法所允许的内容非常灵活。据the documentation说:

@RequestMapping处理程序方法具有灵活的签名,可以从一系列受支持的控制器方法参数和返回值中进行选择。 ...下表显示了支持的控制器方法参数。

[见完整表格的文件]

在可接受的参数类型表中,它特别允许HttpServletRequestHttpServletResponse和用@RequestBody注释的对象。

因此,根据您的发现,您应该设置其他人这样做的事实,以及特别提及它的文档。

© www.soinside.com 2019 - 2024. All rights reserved.