异常的Http状态代码

Car*_*rio 8 java spring http spring-boot

我有一个SpringBoot控制器,我想为异常返回正确的http代码状态.所以,我的问题是:哪个http statu代码更适合Exception的"500"或"409"?

这是我的代码:

@PostMapping(value = {"", "/"})
public ResponseEntity<Response> create(@RequestBody StudioDto studioDto,
        ServletRequest servletRequest, ServletResponse servletResponse) {

    Response response = new Response();

    try {
        studioService.createStudio(studioDto);
        response.setMessage("The studio was create");
        response.setStatusCode(HttpServletResponse.SC_CREATED);

    } catch (Exception e) {
        response.setMessage("Op we have a little problem");
        response.setErrorMessage(e.getMessage());

        //Which one
        //this one 5xx
        response.setStatusCode(500);
        //Or this one 4xx
        response.setStatusCode(409);
    }

    return new ResponseEntity(response, response.getHttpStatus());
}
Run Code Online (Sandbox Code Playgroud)

pau*_*sm4 6

托德建立了很好的联系。这是一种更好的思考方式:

https://httpstatuses.com/

  • 1××信息性

  • 2××成功

  • 3××重定向

  • 4××客户端错误* 400错误的请求* 401未经授权... * 405方法不允许...

  • 5××服务器错误* 500内部服务器错误* 501未实现* 502错误的网关...

换句话说,每个主数(200、400、500等)都是CATEGORY。您可以通过在“类别”中选择特定的错误来“优化”错误代码。

对您的原始问题:

  • 如果客户端请求 “错误”(例如,非法的用户名/密码),则返回4xx。

  • 如果服务器以某种方式失败(例如,您无法读取数据库),则返回5xx。

HTTP错误代码的“官方”列表是RFC 7231:

https://tools.ietf.org/html/rfc7231


Ame*_*bsa 5

这不是处理异常的推荐方法,您应该使用控制器建议,检查此链接

状态代码由特定场景定义,500 表示内部服务器错误,我将用于解决未指定原因的问题,对于 409,它类似于目标资源上的冲突

由于与目标资源的当前状态冲突,无法完成请求。此代码用于用户可能能够解决冲突并重新提交请求的情况

您还有许多其他适用于不同情况的状态代码,所以我想说没有特定的状态代码是正确的答案,您可以查看此链接以获取更多信息