【问题标题】:How to pass customized request to controller in spring mvc?如何在spring mvc中将自定义请求传递给控制器​​?
【发布时间】:2015-02-14 10:30:33
【问题描述】:

一般情况下,当用户提交表单时,request会传递给spring控制器。

控制器的形状是这样的 TestController(HttpServletRequest 请求,HttpServletResponse 响应)

我想传递“MyHttpSevletRequest, MyHttpServletResponse”而不是“HttpSevletRequest, HttpServletResponse”。

有可能吗? 我想知道这是否可能,以及如何?在技​​术上。

不要说“没必要,有替代方法”

我们将不胜感激。谢谢。

【问题讨论】:

  • 您可以实现自己的HandlerMethodArgumentResolver。然而,通常当有人想要介绍他自己的请求/响应时,其他东西通常是更好的解决方案。为什么需要这个?
  • 非常感谢。这就是我想要的。真的很感谢你。我为什么要这样做是为了处理各种请求类型。例如flex 请求、extjs、标准请求……等等。如果我实现 MRequest 对象,那么客户端将不重要。我可以以一致的方式获取请求 getParam();

标签: spring spring-mvc


【解决方案1】:

我不知道如何直接执行此操作,但我知道一种解决方法来完成您打算完成的操作。

您可以使用 spring aop methodbeforeadviceafterreturningadvice 在请求和响应对象进入/离开操作方法之前和之后获取它们。基本上是您将要做的一种请求响应拦截器。在这种情况下,您可以编写一个转换器方法,将标准请求和响应对象作为输入,并使用您的自定义请求和响应对象输出您(您的自定义类应该实现 HttpServletRequest 接口),然后用您的自定义覆盖请求和响应对象对象。

【讨论】:

  • 我在控制器中见过“MRequest, MResponse”。我没有那个来源。但我看到效果很好。 MRequest 与带有附加方法 getParam() 的 Request 不同。我想实现这一点。但我不能开始,因为我不知道会怎样。
  • 这就是我的建议,制作一个拦截器.. 用您的自定义请求对象重写您的标准请求对象.. 因此,您的控制器中将出现的内容将是您的自定义请求对象,您可以随心所欲地使用它..
  • 我真正想要的是向 HttpServletRequest 添加一个方法。拦截器能做到吗?
  • 没有拦截器只是一个公共入口点,您的所有请求对象都将转换为自定义请求,以便您的自定义请求对象在每个操作方法中都可用。
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 2017-02-12
  • 2022-01-11
  • 1970-01-01
  • 2016-06-29
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多