java - 异常的 Http 状态代码

标签 java spring http spring-boot

我有一个 SpringBoot Controller ,我想为异常返回正确的 http 代码状态。所以,我的问题是:对于异常“500”或“409”,哪个 http 状态代码更好?

这是我的代码:

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

最佳答案

Todd 提供了一个很棒的链接。这是一种更好的思考方式:

https://httpstatuses.com/

  • 1×× Informational

  • 2×× Success

  • 3×× Redirection

  • 4×× Client Error * 400 Bad Request * 401 Unauthorized ... * 405 Method Not Allowed ...

  • 5×× Server Error * 500 Internal Server Error * 501 Not Implemented * 502 Bad Gateway ...

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

你原来的问题:

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

  • 如果 Server 因某种原因失败(例如,您无法读取数据库),则返回 5xx。

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

https://www.rfc-editor.org/rfc/rfc7231

关于java - 异常的 Http 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48139728/

相关文章:

c# - Android 中的 HTTP post 问题

javascript - ajax 请求获取 'canceled' 现在网站已上线

c - 如何使用 libcurl 解析 HTTP header ?

java - 是否可以将包中的所有类注册为 Spring bean

java - Spring Boot 中的 NoSuchElementException @ExceptionHandler 不起作用

python - Django 有办法打开 HTTP 长轮询连接吗?

java - 更新: Reading text file into a byte array

java - 在 Java 中的 JTable 中添加 JCombobox 时出现问题?

Java swing UI 崩溃调试

java - ReflectionTestUtils.setfield 不会覆盖本地项目属性