弹簧无法解析 servlet 中的视图

2022-09-05 00:33:01

我已经向我的一个servlet添加了一个新的方法/映射:

@RequestMapping(value = "/user/prefs/order", method = RequestMethod.POST)
public void updateUsersPrefs(@RequestBody Map<String, ArrayList> body, HttpServletRequest request) {
    ...
}

但是当我向此 URL 发送请求时,我收到 500 内部服务器错误,并显示以下错误消息:

javax.servlet.ServletException: Could not resolve view with name 'user/prefs/order' in servlet with name 'appfinder'
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1029)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

我一辈子都不明白为什么会报道这件事。任何人都可以帮忙吗?我还有我可以提供的信息,请让我知道。

谢谢!


答案 1

Spring按以下方式处理具有返回类型的方法:@RequestMappingvoid

void - 如果方法处理响应本身(通过直接编写响应内容,声明类型/用于该目的的参数),或者如果视图名称应该通过(不在处理程序方法签名中声明响应参数)隐式确定。ServletResponseHttpServletResponseRequestToViewNameTranslator

因此,由于此方法没有参数,因此Spring假定您希望通过.HttpServletResponseRequestToViewNameTranslator

如果您没有指定要在上下文中使用的特定对象,则默认实现将启动其中:RequestToViewNameTranslator

只需将传入请求的 URI 转换为视图名称即可。

如果不希望将传入请求的 URI 用作视图名称,则有几种选择:

  1. 使用所需的行为配置自定义RequestToViewNameTranslator
  2. 如果要直接写入响应而不是进行视图解析,请向此方法添加参数。HttpServletResponse
  3. 将此方法的返回类型更改为 ,ModelAndView',以便能够指定方法中的视图或视图名称。StringView, or

答案 2

我遇到了这个问题,原因是我使用的是tiles框架,并且在tiles-def.xml中没有提到视图名称。配置 tiles-def 后.xml问题解决了。


推荐