我正在使用jQuery的$.getJSON()
异步调用我的简单Spring MVC后端。
@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(...) {
...
}
如果没有,这里应该使用什么语法?
7条答案
按热度按时间oiopk7p51#
你可以返回void,然后你必须用@ResponseStatus(value = HttpStatus.OK)标记这个方法,你不需要@ResponseBody
只有get方法隐式返回200状态码,所有其他方法都执行以下三项操作之一:
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
标记它HttpEntity
示例s8vozzvw2#
您可以简单地返回带有适当标头的ResponseEntity:
to94eoyn3#
您可以返回“ResponseEntity”对象。使用“ResponseEntity”对象在构造响应对象(包含响应主体和HTTP状态代码)时以及从响应对象获取信息时都非常方便。
getHeaders()、getBody()、getContentType()、getStatusCode()等方法使阅读ResponseEntity对象的工作变得非常容易。
应使用HTTP状态代码为204(无内容)的ResponseEntity对象,该代码专门用于指定请求已得到正确处理,并且响应正文故意为空。使用适当的状态代码来传达正确的信息非常重要,尤其是在您要创建一个将由多个客户端应用程序使用的API时。
w9apscun4#
是的,您可以将@ResponseBody与
void
返回类型一起使用:e5nszbig5#
但是随着你的系统在大小和功能上的增长...我认为总是返回一个json并不是一个坏主意,更多的是一个架构/“大规模设计”的问题。
您可以考虑总是返回一个具有两个已知字段的JSON:其中code是指定要完成的操作的成功的数字代码,并且data是与所请求的操作/服务相关的任何附加数据。
拜托,当我们使用后端服务提供商时,任何服务都可以被检查,看看它是否运行良好。
所以我坚持,不要让spring管理这个,公开混合返回操作(一些返回数据,其他什么都没有...).. instaed确保你的服务器公开一个更同质的接口。
tjrkku2a6#
返回一个void
@ResponseBody
并没有什么错,对于POST
请求应该这样做。使用HTTP状态码来定义异常处理例程中的错误,而不是像其他人提到的成功状态。一个普通的方法将返回一个响应代码
200
,这是你想要的,任何异常处理程序都可以返回一个错误对象和一个不同的代码(即500
)。zbq4xfa07#
HttpStatus是必需的。
或具有空主体和空标头的ResponseEntity。