我正在使用Spring MVC架构开发Web应用程序。我有一个控制器方法,将由ajax post()调用。控制器中的请求映射器具有“.html”(用于某些清理任务),Spring内部视图解析器正在尝试查找匹配的.JSP文件并抛出404 Not Found错误。我不想创建一个在我的情况下无用的.JSP。我需要一些帮助来确定Spring Context xml中是否有任何设置让视图解析器忽略此URL并且不查找其.JSP文件。
@RequestMapping(value = "/clearSession.html")
public void unloadDAOSession(HttpServletRequest request) {...}
InternalViewResolver正在寻找clearSession.jsp,它会抛出404资源未找到。我不想创建一个没用的JSP。
视图解析器中是否有任何应用程序上下文设置忽略此“.html”文件而不查找其“.jsp”?
感谢任何帮助。
答案 0 :(得分:0)
即使返回类型为void
,也只表示视图名称将根据您看到的URL进行解析。
避免查看解决方案的一种方法是使用@ResponseBody
或注释来回复响应
通过将返回类型调整为
@RequestMapping(value = "/clearSession.html")
public ResponseEntity<String> unloadDAOSession(HttpServletRequest request) {
...
return new ResponseEntity<String>("OK",HttpStatus.NO_CONTENT);
}
这样,您只需将标题和空体添加到响应流
,而不是转发到视图答案 1 :(得分:0)
在使用ajax和传统控制器的情况下,最好的方法是将你的控制器写入页面呈现,就像你已经完成的那样,然后为anjax请求编写一个休息终点层以用于answare。
我只是给你一些代码来清除我想说的话:
控制器层:
@RequestMapping(value = "/yourPage")
public void yourPage(Model mode) {...}
休息层:
@RequestMapping(value = "/yourAjax")
public ResponseEntity<String> yourAjax(@RequstBody YoutDTOClass postBody) {
...
return ResponseEntity.created(...).build();
}
class YoutDTOClass{
// your properties
....
}
使用此架构,您可以分离ajax请求的服务层和用于为您的页面提供服务的经典Web层。
只是提示不要使用像/yourPage.html这样的模式,但你应该像/youtPage这样的模式。这对于Spring的视图解析器抽象的banefit来说,你应该让springMVC来解析实际的视图。
即使对于ajax,您也应该使用accept标头来询问您资源的正确表示,并且ResponseEntity应该用于返回201 Http状态,以便向浏览器说明您的资源已创建。请记住,一个更好的方法应该优先使用REST方法中的http方法,然后删除一个会话,你应该预先删除一个会话的delte方法,并把http方法用于更新会话的状态。
我希望这可以帮到你