【问题标题】:Spring 3 - Combination of @PathVariable and HttpServletRequestSpring 3 - @PathVariable 和 HttpServletRequest 的组合
【发布时间】:2012-09-21 11:36:02
【问题描述】:

我有这个控制器映射

@RequestMapping("/{language}/payment/{id}/reward/{rewardId}/name/{name}/address/{address}")
public String paymentPackage(@PathVariable Long id, @PathVariable Long
rewardId, @PathVariable String name, @PathVariable String address,
ModelMap model, HttpServletRequest request)

效果很好,但现在我需要将“HttpServletRequest 请求”传递给其他方法,但请求不包含来自 REST URL 的变量(id、name、...) 是否也可以在 HttpServletRequest 中有这个变量? 谢谢。

【问题讨论】:

  • 你能提供其他方法(/控制器)的签名吗?
  • 另一个方法不在控制器中,它是一个使用请求对象的服务。我认为这种方法的签名与问题无关。很简单,doXXX(HttpServletRequest request)
  • 为什么不将这些@PathVariable 变量存储在一个简单的bean 中,然后将bean 与request 一起传递给下游方法? IDE 重构函数是你的朋友。

标签: spring servlets spring-mvc annotations


【解决方案1】:

创建一个过滤器并修改请求以包含所有需要的变量。或者在controller里面修改请求。

 request.setAttribute("name", name);

【讨论】:

    【解决方案2】:

    在模型中设置值并从页面访问。如果您需要从其他方法访问,请将其作为参数传递给方法。

    model.addAttribute("request", request);
    

    【讨论】:

    • 我有请求对象,但它的参数为空,因为我使用@PathVariable 和休息网址。我想要的是在路径变量和请求中都有它们。
    • 你不能这样。Path 变量应该绑定到一个 URI 模板变量。并且无法通过请求访问。如果您想通过请求访问,请将其作为参数传递。这可以通过请求访问
    猜你喜欢
    • 2021-04-12
    • 2020-01-14
    • 2013-11-17
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多