我正在使用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(...) {
...
}
如果没有,这里使用的语法是什么?提前谢谢!
答案 0 :(得分:227)
你可以返回void,然后你必须用@ResponseStatus(value = HttpStatus.OK)标记你不需要@ResponseBody的方法
@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void updateDataThatDoesntRequireClientToBeNotified(...) {
...
}
只有get方法返回200状态代码隐含,其他所有方法都执行以下三种操作之一:
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
HttpEntity
实例答案 1 :(得分:40)
您只需返回具有相应标头的ResponseEntity:
@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public ResponseEntity updateDataThatDoesntRequireClientToBeNotified(...){
....
return new ResponseEntity(HttpStatus.OK)
}
答案 2 :(得分:8)
您可以返回“ResponseEntity”对象。 在构造响应对象(包含响应主体和HTTP状态代码)时以及从响应对象获取信息时,使用“ResponseEntity”对象非常方便。
getHeaders(),getBody(),getContentType(),getStatusCode()等方法使得阅读ResponseEntity对象的工作变得非常简单。
您应该使用HTTP状态代码为204(无内容)的ResponseEntity对象,该对象专门用于指定请求已正确处理且响应正文有意为空。 使用适当的状态代码来传达正确的信息非常重要,特别是如果您正在制作将由多个客户端应用程序使用的API。
答案 3 :(得分:3)
是的,您可以将@ResponseBody与protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
const string culture = "en-GB";
CultureInfo ci = CultureInfo.GetCultureInfo(culture);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
}
返回类型一起使用:
void
答案 4 :(得分:2)
返回空格@ResponseBody
并没有问题,您应该POST
次请求。
使用HTTP状态代码来定义异常处理程序例程中的错误,而不是其他人提到成功状态。您拥有的常规方法将返回您想要的响应代码200
,然后任何异常处理程序都可以返回错误对象和不同的代码(即500
)。
答案 5 :(得分:1)
但随着你的系统规模和功能的增长......我认为总是回归json并不是一个坏主意。更像是建筑/大规模设计"物质
您可以考虑始终使用两个已知字段来恢复JSON:代码和数据。代码是指定要完成的操作成功的数字代码,数据是与请求的操作/服务相关的任何附加数据。
来吧,当我们使用后端服务提供商时,可以检查任何服务以查看它是否运行良好。
所以我坚持,不要让spring管理这个,暴露混合返回操作(有些返回数据其他什么......).. instaed确保你的服务器暴露出更加同质的界面。在一天结束时更简单。
答案 6 :(得分:0)
以下是我为异步方法做的示例代码
@RequestMapping(value = "/import", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void importDataFromFile(@RequestParam("file") MultipartFile file)
{
accountingSystemHandler.importData(file, assignChargeCodes);
}
您无需从方法中返回任何使用此注释所需的内容,以便您的方法在每种情况下都返回OK
@ResponseStatus(value = HttpStatus.OK)