如果 Spring MVC 控制器方法不返回值,该怎么办?

2022-08-31 07:34:59

我正在使用jQuery对我简单的Spring MVC后端进行异步调用。大多数弹簧控制器方法如下所示:$.getJSON()

@RequestMapping(value = "/someURL", method = RequestMethod.POST)
public @ResponseBody SomePOJO getSomeData(@ModelAttribute Widget widget,
    @RequestParam("type") String type) {
    return someDAO.getSomeData(widget, type);
}   

我已经设置了一些东西,以便每个控制器返回为JSON,这是客户端期望的。@ResponseBody

但是,当请求不应将任何内容返回到客户端时,会发生什么情况呢?我可以有:

@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public @ResponseBody void updateDataThatDoesntRequireClientToBeNotified(...) {
    ...
}

如果没有,这里使用的适当语法是什么?


答案 1

你可以返回void,然后你必须用@ResponseStatus(value = HttpStatus.OK)标记方法,你不需要@ResponseBody

@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void updateDataThatDoesntRequireClientToBeNotified(...) {
    ...
}

只有 get 方法才会隐式返回 200 状态代码,所有其他方法都执行以下三项操作之一:

  • 返回 void 并标记方法@ResponseStatus(value = HttpStatus.OK)
  • 返回对象并标记@ResponseBody
  • 返回实例HttpEntity

答案 2

您只需返回具有相应标头的响应实体:

@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public ResponseEntity updateDataThatDoesntRequireClientToBeNotified(...){
....
return new ResponseEntity(HttpStatus.OK)
}

推荐