【发布时间】:2014-09-09 17:12:43
【问题描述】:
所以我有一个 org.springframework.stereotype.Controller,如果指定了 HTTP 标头 HA 和 HB,我想做的是正常处理请求。但是,如果请求指定了查询参数 QA 和 QB,我想重定向请求而不使用 QA 或 QB,但使用 HTTP 标头 HA 和 HB,这样 HA 的值为 QA,HB 的值为 QB。
例如,如果传入请求是带有 HTTP 标头 x-name=foo 和 x-date=bar 的 HTTP GET ~/rest/mortgage,我会按原样处理该请求。但是如果传入的请求是 HTTP GET ~/rest/mortgage?x-name=foo&x-date=bar,我想用请求 HTTP GET ~/rest 重定向到我自己em>/mortgage 带有 HTTP 标头 x-name=foo 和 x-date=bar。
通过这样做,我只需在控制器级别添加一个简单的检查,就可以拥有一个处理两种发出 HTTP 请求的样式的代码路径。这是因为我将 HttpServletRequest 传递给代码的各个部分,所以如果我始终保持 HA 和 HB 而不是 QA 和 QB 的一致性,它会降低代码的圈复杂度。
这可能吗?如果是这样,怎么办?
如果这是不可能的,我可以通过为 HttpServletRequest 定义自己的包装器来实现我想要的结果,该包装器为我完成转换,但这不是一个优雅的解决方案。
【问题讨论】:
-
这听起来更像是 ServletFilter 应该处理的事情。
-
这个可能的解决方案缺少的是如何添加 HA 和 HB(在转换后的请求中添加 HTTP 标头)。该解决方案为以其他方式转换请求提供了明显的答案。
-
好的,你需要把两个想法结合在一起。我在下面发布了一个暂定答案,请检查它是否有效。
标签: java spring spring-mvc tomcat