【问题标题】:Having @RequestBody and HttpServletRequest in the same Controller method在同一个控制器方法中拥有 @RequestBody 和 HttpServletRequest
【发布时间】:2018-06-29 02:02:19
【问题描述】:

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

@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】:

    这很好,并且受 Spring 支持。事实上,我刚刚完成了一个与您在示例中使用的控制器方法几乎相同的控制器方法。 Spring 对于用@RequestMapping 装饰的方法非常灵活。根据the documentation

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

    [完整表格见文档]

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

    因此,您应该根据您的发现确定其他人正在这样做的事实,以及具体提及它的文档。

    【讨论】:

      猜你喜欢
      • 2021-03-02
      • 2020-12-06
      • 2012-07-18
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 2016-12-18
      相关资源
      最近更新 更多