gpt4 book ai didi

java - @RequestParam 因 HttpServletRequestWrapper 而失败

转载 作者:行者123 更新时间:2023-11-30 11:13:01 25 4
gpt4 key购买 nike

我有一个标准的 Spring MVC Controller (服务于 REST 调用),如下所示:

@Controller
public class SpringRestController {
@RequestMapping({"/message"})
@ResponseBody
public Message getMessage(@RequestParam(required=false) String username, HttpServletRequest request) {
return new Message("Hello " + username);
}
}

我的理解是 Spring MVC 将调用 HttpServletRequest.getParameter("username") 并将结果注入(inject)到“username”方法参数中。

但我的原始请求包含“用户名”参数。我查找另一个请求参数,构造一个“用户名”值并将其设置在 HttpServletRequestWrapper 实现中(使用自定义过滤器)。像这样:

public class UserResolvingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
filternChain.doFilter(
new HttpServletRequestWrapper(request) {
@Override
public String getParameter(String name) {
return getParameterMap().get(name);
}
@Override
public Map<String, String[]> getParameterMap() {
Map<String, String[]> map = new HashMap(super.getParameterMap());
// Simplified for brevity
map.put("username", new String[] {"testUserName"});
return map;
}

},
response
);
}
}

过滤器在 web.xml 中配置如下:

<filter>
<filter-name>userResolvingFilter</filter-name>
<filter-class>my.package.UserResolvingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>userResolvingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

问题:我的 getMessage Controller 方法中的用户名参数始终为空。我已经确认了

  1. 过滤器已成功调用。
  2. Spring 使用几个其他参数名称调用我的 HttpServletRequestWrapper.getParameter(String name) 的匿名实现,但从不使用“用户名”。
  3. Spring 不会调用我的 HttpServletRequestWrapper.getParameterMap() 的匿名实现。不确定是否应该。
  4. “请求”参数(在 getMessage() 方法中)是HttpServletRequestWrapper。

我想知道可能出了什么问题?

注意:我只提供了相关代码并稍作修改以使问题简单。如果有语法错误,请忽略。

最佳答案

我对代码编译感到惊讶。从提供的代码

return getParameterMap().get(name);

应该返回一个 String[],但包含该代码的方法返回一个 String。

虽然我可能遗漏了一些东西。

关于java - @RequestParam 因 HttpServletRequestWrapper 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26598966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com