小编典典

Spring Boot Rest Controller如何返回不同的HTTP状态代码?

spring-boot

我将Spring Boot用于简单的REST API,如果出现故障,我想返回正确的HTTP状态代码。

@RequestMapping(value="/rawdata/", method = RequestMethod.PUT)
@ResponseBody
@ResponseStatus( HttpStatus.OK )
public RestModel create(@RequestBody String data) {
    // code ommitted..
    // how do i return a correct status code if something fails?
}

作为Spring和Spring Boot的新手,基本问题是当一切正常或失败时如何返回不同的状态代码?


阅读 410

收藏
2020-05-30

共1个答案

小编典典

您可以使用几个选项。很好的方法是使用异常和类进行处理@ControllerAdvice

@ControllerAdvice
class GlobalControllerExceptionHandler {
    @ResponseStatus(HttpStatus.CONFLICT)  // 409
    @ExceptionHandler(DataIntegrityViolationException.class)
    public void handleConflict() {
        // Nothing to do
    }
}

您也可以传递HttpServletResponse给控制器方法,并设置响应代码:

public RestModel create(@RequestBody String data, HttpServletResponse response) {
    // response committed...
    response.setStatus(HttpServletResponse.SC_ACCEPTED);
}

有关详细信息,请参阅此出色的博客文章: Spring
MVC中的异常处理


注意

在Spring MVC中,使用@ResponseBody注释是多余的-
它已包含在@RestController注释中。

2020-05-30