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

2022-08-31 04:30:20

我正在使用Spring MVC进行简单的JSON API,并采用如下所示的基于方法。(我已经有一个直接生成JSON的服务层。@ResponseBody

@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);

...但我不能在这里使用它,因为我的方法的返回类型是字符串,而不是响应实体。


答案 1

将返回类型更改为 ,然后可以使用下面的 400:ResponseEntity<>

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);

答案 2

像这样的东西应该有效,但我不确定是否有更简单的方法:

@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;
}

推荐