我使用类型" DELETE"的jquery ajax发送请求。在服务器端,我有approprite句柄方法,如下所示:
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String delete(@RequestParam("hotel") String hotelCode, @PathVariable Long id, Model model){
//delete operation
return "redirect:/HotelTaxesAndCharges?hotel="+hotelCode;
}
以及我想在删除后重定向我的调用的方法如下所示
@RequestMapping(method = RequestMethod.GET)
public String getAll(@RequestParam("hotel") String hotelCode, Model model){
//logic
return 'getAll';
}
因此,当我在执行期间调用delete方法时,我收到错误"您可以仅使用GET PUT或HEAD方法重定向到JSP"。我找到了使用HiddenHttpMethodFilter的解决方案,但结果代码看起来有点乱,我需要使用POST发送请求并添加其他参数(_method)以使用自定义请求类型进行请求。
所以我的问题是还有其他DELETE / REDIRECT / GET转换的解决方案。
对不良英语抱歉
更新
所以你可以使用删除重定向。如果我将所有内容从删除更改为帖子,我会得到:
答案 0 :(得分:4)
即使不是您需要的,也会发生什么是正常的:
DELETE /.../Hotel...
用于method = GET @RequestMapping
所有这些都由你的wireshark痕迹确认
当您发送POST请求时,它会起作用,因为为了与HTTP 1.0兼容,所有主流浏览器都使用GET进行POST后的重定向,如果状态为303
有一个直接的解决方法:除了GET之外,允许重定向URL的方法接受DELETE。不是很贵,但不是很好。
您还可以在客户端管理重定向:只需发送一个由ajax接收的200代码,然后让ajax进行重定向
最后一个解决方案在于使用一个303代码,该代码明确要求浏览器独立于以前的方法发出GET。您可以通过让控制器请求将HttpServletResponse作为paremeter并返回null来对其进行硬编码。然后,您手动添加Location
标头和303状态代码。
但您也可以通过将其redirectHttp10Compatible属性设置为false来配置InternalResourceViewResolver
以返回303代码而不是302代码。您可以在servlet应用程序上下文中声明一个bean,Spring将使用它。但是,您不能使用不支持HTTP 1.1和303状态代码的旧版浏览器。