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

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

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

我设置了一些内容,以便每个控制器将 @ResponseBody作为 JSON 返回,这是客户端所期望的。

但是,如果请求不应该向客户端返回任何内容,会发生什么情况呢:

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

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

154803 次浏览

您只需返回一个带有适当标题的 ResponseEntity:

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

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

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

只有获取方法返回200个隐含状态码,所有其他方法都要做以下三件事之一:

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

但随着你的系统规模和功能的增长... 我认为总是返回一个 json 是一个不错的主意。更多的是一个建筑/“大规模设计”的问题。

您可以考虑总是返回一个带有两个已知字段的 JSON: 代码和数据。其中代码是指定要执行的操作成功与否的数字代码,数据是与所请求的操作/服务相关的任何附加数据。

拜托,当我们使用后端服务提供商时,可以检查任何服务是否工作正常。

因此,我坚持,不让 Spring 管理这个,暴露混合返回操作(有些返回数据,其他什么也没有...)。.确保您的服务器公开一个更加同质的接口。一天结束的时候会更简单。

返回一个无效的 @ResponseBody没有错,对于 POST请求应该这样做。

当其他人提到成功状态时,使用 HTTP 状态代码定义异常处理程序例程中的错误。一个普通的方法将返回一个 200的响应代码,这是你想要的,任何异常处理程序可以返回一个错误对象和一个不同的代码(即 500)。

是的,你可以使用带有 void返回类型的@ResponseBody:

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

可以返回“ ResponseEntity”对象。 在构建响应对象(包含响应体和 HTTP状态码)和从响应对象获取信息时,使用“ ResponseEntity”对象都非常方便。

诸如 getHeader ()、 getBody ()、 getContentType ()、 getStatusCode ()等方法使读取 ResponseEntity 对象的工作变得非常容易。

您应该使用的 ResponseEntity 对象的 HTTP状态码为204(无内容) ,专门用于指定请求已经得到正确处理,并且响应主体是故意空白的。 使用适当的状态代码来传递正确的信息非常重要,特别是如果您正在制作一个将被多个客户端应用程序使用的 API。