SpringMVC在处理Ajax请求后返回void导致前台Ajax回调函数不执行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianjindong0804/article/details/83548469

问题简述

在一次SpringMVC项目中,前台通过Ajax请求,准备修改数据库中的数据。因为Ajax请求只是让后台更改数据,所以Controller方法根本不需要返回给前台任何数据,所以我们将Controller的方法的返回值设置为void。但令我困扰的是,前端页面本应该执行的回调函数一直不执行。

打开控制态发现报404错误。我又通过debug发现该请求是可以进入Controller方法的,让我很不解的是为什么我已经进入Controller的方法中并处理完成了,但居然报404错,如下图:

解决方案

 我们需要在返回值前面加上一个@ResponseBody注解,因为即使方法返回值为void,spring也会按照前台请求过来的页面地址去找,找不到就会报上图的404错误。

        @RequestMapping("/customer/update.action")
	public @ResponseBody void updateAjax(Customer customer){
		customerService.update(customer);
	}

也就是说,我们对于接受Ajax请求的Controller方法,不管是否需要返回数据,都需要在返回值前面加上@ResponseBody注解,或者说通过Response手动回写一段数据,例如:“OK”。也可以解决上面的问题。

        @RequestMapping("/customer/update.action")
	public void updateAjax(HttpServletResponse response,Customer customer) throws IOException{
		customerService.update(customer);
		response.getWriter().write("ok");
	}

至于这么做的底层原理需要分析SpringMVC的源代码。

猜你喜欢

转载自blog.csdn.net/tianjindong0804/article/details/83548469