如何在返回 String 的 Spring MVC @ResponseBody 方法中响应 HTTP 400 错误

新手上路,请多包涵

我将 Spring MVC 用于一个简单的 JSON API,基于 @ResponseBody 的方法如下。 (我已经有一个直接生成 JSON 的服务层。)

 @RequestMapping(value = "/matches/{matchId}", produces = "application/json")
@ResponseBody
public String match(@PathVariable String matchId) {
    String json = matchService.getMatchJson(matchId);
    if (json == null) {
        // TODO: how to respond with e.g. 400 "bad request"?
    }
    return json;
}

在给定的场景中,响应 HTTP 400 错误的最简单、最干净的方法是什么?

我确实遇到过以下方法:

 return new ResponseEntity(HttpStatus.BAD_REQUEST);

…但我不能在这里使用它,因为我的方法的返回类型是字符串,而不是 ResponseEntity。

原文由 Jonik 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 531
2 个回答

将您的返回类型更改为 ResponseEntity<> ,然后您可以将以下内容用于 400:

 return new ResponseEntity<>(HttpStatus.BAD_REQUEST);

对于正确的请求:

 return new ResponseEntity<>(json,HttpStatus.OK);

在 Spring 4.1 之后,ResponseEntity 中有一些辅助方法可以用作:

 return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);

return ResponseEntity.ok(json);

原文由 Bassem Reda Zohdy 发布,翻译遵循 CC BY-SA 4.0 许可协议

这样的事情应该可行,但我不确定是否有更简单的方法:

 @RequestMapping(value = "/matches/{matchId}", produces = "application/json")
@ResponseBody
public String match(@PathVariable String matchId, @RequestBody String body,
            HttpServletRequest request, HttpServletResponse response) {
    String json = matchService.getMatchJson(matchId);
    if (json == null) {
        response.setStatus( HttpServletResponse.SC_BAD_REQUEST  );
    }
    return json;
}

原文由 stacker 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题