为什么使用Spring MVC的void方法上的@ResponseBody显示在Firefox控制台中找不到元素?

时间:2014-10-31 09:36:45

标签: java jquery ajax spring spring-mvc

我有一个Spring MVC控制器,我通过JQuery.ajax调用。

控制器中的映射是:

@RequestMapping(value = "/remove", method = RequestMethod.POST)
@ResponseBody
public void remove(@RequestParam("value1") String value1,
                   @RequestParam("value2") String value2)
{
  // do stuff
}

ajax调用是:

$.ajax({
    url: '/appserver/model/remove',
    data: { value1: value1, value2: value2 },
    type: 'POST',
    traditional: true,
    success: function() {
      // do something on success
    },
    error: function(jqXHR, textStatus, errorThrown) {
      // do something on error
    }
  });

POST调用成功完成,HTTP状态为200.但是,在Firefox控制台中输出以下内容:

no element found ... myscript.js:1

如果我更改控制器以返回布尔值,则此错误消失。但是,根据具有@ResponseBody的this question对void返回类型的方法有效。

我可以更改任何内容以删除此消息吗?

1 个答案:

答案 0 :(得分:2)

JQuery BugsFirefox Bug中所述,当响应实体主体为空时,会出现Firefox问题。

要修复它,您必须在Controller方法中返回这样的ResponseEntity。

尝试在您的请求中添加 dataType:' text'

$.ajax({
    url: '/appserver/model/remove',
    data: { value1: value1, value2: value2 },
    type: 'POST',
    traditional: true,
    dataType: 'text',
    success: function() {
      // do something on success
    },
    error: function(jqXHR, textStatus, errorThrown) {
      // do something on error
    }
  });

并修改您的Controller以返回 ResponseEntity ,并将String作为第一个参数

@RequestMapping(value = "/remove", method = RequestMethod.POST)
public ResponseEntity<String> remove(@RequestParam("value1") String value1,
                   @RequestParam("value2") String value2)
{
  // do stuff
return new ResponseEntity<String>("OK!!!",HttpStatus.NO_CONTENT);

}