首页
学习
活动
专区
圈层
工具
发布

当Restlet返回400 Bad Request时,它是否返回415不支持的媒体类型?

在REST API开发中,400 Bad Request和415 Unsupported Media Type是两种不同的HTTP状态码,它们的含义和触发条件有明确区别:

  1. 基础概念
  • 400 Bad Request:表示服务器无法理解客户端的请求,通常由于语法错误(如JSON格式错误)、缺少必要参数或参数验证失败。
  • 415 Unsupported Media Type:专指客户端发送的Content-TypeAccept头与服务器支持的媒体类型不匹配(如客户端发送XML但服务端只接受JSON)。
  1. 关键区别
  • 400是通用错误,415是特定于内容类型的错误
  • 415必须检查请求头,而400可能涉及请求体的任何部分
  • 规范要求415响应必须包含AcceptAccept-Post头说明支持的格式(RFC 7231)
  1. Restlet框架行为 Restlet默认不会在400响应中包含415错误。但可以通过自定义StatusService实现联动处理:
代码语言:txt
复制
public class CustomStatusService extends StatusService {
    @Override
    public Representation getRepresentation(Status status, Request request, Response response) {
        if (status.getCode() == 400) {
            // 检查是否是Content-Type导致的问题
            if (!isMediaTypeSupported(request)) {
                status = new Status(415, "Unsupported Media Type");
                response.setStatus(status);
            }
        }
        return super.getRepresentation(status, request, response);
    }
    
    private boolean isMediaTypeSupported(Request request) {
        MediaType contentType = request.getEntity().getMediaType();
        return getSupportedMediaTypes().contains(contentType);
    }
}
  1. 常见场景示例
  • 纯400场景
  • 纯400场景
  • 应返回415的场景
  • 应返回415的场景
  1. 最佳实践建议
  • 明确区分参数错误(400)和格式错误(415)
  • 在API文档中声明支持的媒体类型
  • 使用过滤器统一处理内容类型验证:
  • 使用过滤器统一处理内容类型验证:
  1. 调试建议
  • 使用工具(如Postman)明确检查请求头
  • 服务端应记录详细的错误日志
  • 对于AJAX请求,确保设置正确的headers: { 'Content-Type': 'application/json' }

总结:Restlet默认不会自动将400转换为415,需要开发者显式处理媒体类型验证。正确的状态码使用有助于客户端快速定位问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Http】一文备忘Http状态码(406,415,422)

415:Unsupported media type,与406正好相反,有一些请求必须带着数据发往服务器,这些数据都属于特定的媒体类型,如果API不支持该媒体类型格式,415就会被返回。...它说明服务器已经懂得了实体的Content Type,也就是说415状态码肯定不合适;此外,实体的语法也没有问题,所以400也不合适。但是服务器仍然无法处理这个实体数据,这时就可以返回422。...[FromBody]*接收,服务端api是不会接收数据,便会返回415 Unsupported Media Type-不支持的媒体类型。...服务器已经懂得了实体的Content Type的媒体类型,也就是说415状态码肯定不合适; 此外,实体的语法也没有问题,所以400也不合适。 但是服务器仍然无法处理这个实体数据,这时就可以返回422。...对于实体模型验证错误: *ASP.NET Core*默认使用的是400状态码-Bad Request { "errors": { }, "type": "https://tools.ietf.org

2K10

使用ASP.NET Core 3.x 构建 RESTful API - 3.3 状态码、错误故障、ProblemDetails

4xx,客户端错误: 400 - Bad Request,表示API消费者发送到服务器的请求是有错误的; 401 - Unauthorized,表示没有提供授权信息或者提供的授权信息不正确...not allowed,当尝试发送请求到资源的时候,使用了不被支持的HTTP方法时,就会返回405状态码; 406 - Not acceptable,这表示API消费者请求的表述格式并不被Web...415 - Unsupported media type,与406正好相反,有一些请求必须带着数据发往服务器,这些数据都属于特定的媒体类型,如果API不支持该媒体类型格式,415就会被返回。...它说明服务器已经懂得了实体的Content Type,也就是说415状态码肯定不合适;此外,实体的语法也没有问题,所以400也不合适。但是服务器仍然无法处理这个实体数据,这时就可以返回422。...例如,当返回类型为 IActionResult 的方法返回客户端错误状态码的时候(4xx),同时还会返回一个body,这个 body 就是 ProblemDetails。

1.8K20
  • HTTP协议状态码

    see other 允许post请求的响应重定向 304 not modified 资源没有修改,返回的时候不能有主体内容,还是本地的内容 305 use proxy 使用代理来请求资源...307 temporary redirect 临时重定向,与301类似 因为http1.0和http1.1的差别因此有交叉 400-499 客户端错误状态码 400 bad...405 methord not allowed 请求url不支持的方法,应该返回allow首部告诉允许啥 406 not acceptable 客户端指定参数说明可以接受什么类型的文本...entity too large 客户端发的内容太大 414 request uri too long 请求的url太长 415 unsuport media type 不支持的媒体类型...500 internal server error 内部错误 501 not implemented 没有实现,超出了服务器的范围 502 bad gateway 代理或者网关下一链路收到未响应

    96810

    Spring使用@ControllerAdvice注解优雅地处理异常信息

    最常用的就是异常处理。 统一异常处理 需要配合@ExceptionHandler使用。当将异常抛到Controller时,可以对异常进行统一处理,规定返回的json格式或是跳转到一个错误页面。... - 错误的请求 31     */ 32    @ResponseStatus(HttpStatus.BAD_REQUEST) 33    @ExceptionHandler(HttpMessageNotReadableException.class...mv.addObject("code", ExceptionEnum.HTTP_BAD_REQUEST.getCode()); 39        mv.addObject("message", ExceptionEnum.HTTP_BAD_REQUEST.getMessage... - 不支持的媒体类型 87     */ 88    @ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE) 89    @ExceptionHandler...handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e) { 91        logger.error("不支持的媒体类型

    1K20

    HTTP状态码

    总体范围 已定义范围 类别 100~199 100~101 信息 200~299 200~206 成功 300~399 300~305 重定向 400~499 400~415 客户端错误 500~599...但客户端应该用Location首部给出的 URL 对资源进行临时定位 400 Bad request(坏请求) 告诉客户端它发送了一条异常请求 401 Unauthorized(未授权) 与适当的首部一起返回...408 Request Timeout(请求超时) 如果客户端完成其请求时花费的时间太长,服务器可以回送这个状态码并关闭连接 409 Conflict(冲突) 发出的请求在资源上造成了一些冲突 410...,就返回这个响应码 413 Request Entity Too Large(请求实体太大) 客户端发送的实体主体部分比服务器能够或者希望处理的要大 414 Request URI Too Long(请求...URI太长) 客户端发送的请求所携带的请求 URL 超过了服务器能够或者希望处理的长度 415 Unsupported Media Type(不支持的媒体类型) 服务器无法理解或不支持客户端所发送的实体的内容类型

    1.4K10

    HTTP协议之状态码详解

    状态码 状态消息 含义 实例 400 Bad Request(坏请求) 告诉客户端,它发送了一个错误的请求。...Type(不支持的媒体类型) 服务器无法理解或不支持客户端所发送的实体的内容类型 416 Requested Range Not Satisfiable(所请求的范围未得到满足) 417 Expectation...在不获取资源的情况下了解资源的情况(比如判断其类型)   2. 通过查看Response中的状态码, 看看某个对象是否存在   3. 通过查看Header, 测试资源是否被修改了。   ...400 Bad Request(坏请求)   发送的Request中的数据有错误(比如:表单有错误,Cookie有错误),  这个我们也经常见到。    ...当浏览器使用Post方法,发送数据给Web服务器时, 必须要有Content-Length。

    1.8K10

    快速学习-RESTFul设计风格

    常见状态码: 状态码 含义 说明 200 OK 操作成功, 并返回数据 201 CREATED 新建成功 204 NO CONTENT 删除成功 400 BAD REQUEST 请求语法错误 403 Forbidden...) - 资源的URI已被更新 303(See Other) - 其他(如,负载均衡) 304(not modified)- 资源未更改(缓存) 400 (bad request)- 指代坏请求(如...)- 服务端不支持所需表示 409 (conflict)- 通用冲突 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突) 415 (unsupported...)- 其他(如,负载均衡) 400 (bad request)- 指代坏请求 404 (not found)- 资源不存在 406 (not acceptable)- 服务端不支持所需表示 409...(conflict)- 通用冲突 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突) 415 (unsupported media type)- 接受到的表示不受支持

    1.4K20

    网络编程之HTTP状态码详解

    但客户端应该用 Location 首部给出的 URL对资源进行临时定位 400~499(已定义400~417) 状态码 原因短语 含义 400 Bad request( 坏请求) 告诉客户端它发送了一条异常请求...401 Unauthorized( 未授权) 与适当的首部一起返回, 在客户端获得资源访问权之前, 请它进行身份认证 402 Payment Required( 要求付款) 当前此状态码并未使用, 是为未来使用预留的...408 Request Timeout( 请求超时) 如果客户端完成其请求时花费的时间太长, 服务器可以回送这个状态码并关闭连接 409 Conflict( 冲突) 发出的请求在资源上造成了一些冲突..., 就返回这个响应码 413 Request Entity Too Large( 请求实体太大) 客户端发送的实体主体部分比服务器能够或者希望处理的要大 414 Request URI Too Long...(请 求 URI太长) 客户端发送的请求所携带的请求 URL 超过了服务器能够或者希望处理的长度 415 Unsupported Media Type( 不支持的媒体类型) 服务器无法理解或不支持客户端所发送的实体的内容类型

    90140

    HTTP状态码

    304 Not Modified 表示请求的资源无发生修改,将不会返回任何资源。 400 Bad Request 表示客户端发出的请求有误(格式、大小、无效的…),服务端不能/不会处理该请求。...501 Not Implemented 表示服务端不支持完成请求所需的功能,导致无法完成请求。 502 Bad Gateway 表示作为网关或代理的服务段在执行请求时,从上游服务器获得了无效的响应。...(RFC 7538) 400 Bad Request 客户端请求的语法错误,服务器无法理解。 401 Unauthorized 请求要求用户的身份认证。...可以理解为服务端能理解请求资源类型 Content-type,否则应该返回 415(Unsupported Media Type),也能理解请求实体内容,否则应该返回 400(Bad Request)。...499 Client Closed Request 表示 Nginx 使用非标准状态码。表明当 Nginx 正在处理请求时,客户端关闭了连接。

    50710

    http 301、302、304、400、405、415状态码解释

    304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3xx类别中,但是和重定向没有关系。...举例说明 请求hao123主页,js、css、图片状态码很多是304 随便找一个看看,会发现有header中有判断资源是否修改的设置。...400 bad request 表示请求的报文中存在语法错误,比如url含有非法字符。...提交json时,如果json格式有问题,接收端接收json,也会出现400 bad request 比如常见的json串,数组不应该有”,但是有”了。...比如: 后台方法规定的请求方式只接受get,如果用post请求,就会出现 405 method not allowed的提示 415 后台程序不支持提交的content-type,就会返回415,spring

    7.5K20

    Http请求方法和响应状态码整理

    HTTP请求方法: GET: 请求指定的页面信息,并返回实体主体。 HEAD: 只请求页面的首部。 POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。...TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。 PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。 MOVE: 请求服务器将指定的页面移至另一个网络地址。...重置内容 206 部分内容 ③ 重定向 300 多路选择 301 永久转移 302 暂时转移 303 参见其它 304 未修改(Not Modified) 305 使用代理 ④ 客户方错误 400...错误请求(Bad Request) 401 未认证 402 需要付费 403 禁止(Forbidden) 404 未找到(Not Found) 405 方法不允许 406 不接受 407...需要代理认证 408 请求超时 409 冲突 410 失败 411 需要长度 412 条件失败 413 请求实体太大 414 请求URI太长 415 不支持媒体类型 ⑤ 服务器错误

    2.7K140

    返回什么就去解决什么,不要盯着状态码找不到解决办法。。。

    HTTP 状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。...当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。...使用GET请求重定向 400 Bad Request 客户端请求的语法错误,服务器无法理解 401 Unauthorized 请求要求用户的身份认证 402 Payment Required 保留...如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理 415 Unsupported...Expect的请求头信息 500 Internal Server Error 服务器内部错误,无法完成请求 501 Not Implemented 服务器不支持请求的功能,无法完成请求 502 Bad

    77320

    HTTP 协议简介

    另一个HTTP 1.1的新特性是支持部分内容请求/响应,这意味着当客户端请求的数据量很大时,可以分多次发起请求,每次请求只要求获取整块数据的一部分。...Web服务器也可以分多次响应,每次只返回整块数据的一部分。这使得流媒体得以实现。...当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented...客户端错误 400 — Bad Request 错误请求。 401 — Unauthorized 未认证。 402 — Payment Required 需要付费。...415 — Unsupported Media Type 不支持媒体类型。 416 — Requested range not satisfiable。

    86520

    HTTP状态码大全

    HTTP状态码大全 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。...当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。 HTTP状态码的英文为HTTP Status Code。...使用GET请求重定向 400 Bad Request 客户端请求的语法错误,服务器无法理解 401 Unauthorized 请求要求用户的身份认证 402 Payment Required 保留,将来使用...如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理 415 Unsupported...Expect的请求头信息 500 Internal Server Error 服务器内部错误,无法完成请求 501 Not Implemented 服务器不支持请求的功能,无法完成请求 502 Bad

    31710

    HTTP状态码说明

    HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。...所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 305 Use Proxy 使用代理。...使用GET请求重定向 400 Bad Request 客户端请求的语法错误,服务器无法理解 401 Unauthorized 请求要求用户的身份认证 402 Payment Required 保留...如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理 415 Unsupported...Expect的请求头信息 500 Internal Server Error 服务器内部错误,无法完成请求 501 Not Implemented 服务器不支持请求的功能,无法完成请求 502 Bad

    6610

    Servlet HTTP 状态码大全列表

    以下是可能从 Web 服务器返回的 HTTP 状态码和相关的信息列表: 代码 消息 描述 100 Continue 只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。...307 Temporary Redirect 所请求的页面已经临时转移到一个新的 URL。 400 Bad Request 服务器不理解请求。...当您转换一个 "post" 请求为一个带有长的查询信息的 "get" 请求时发生。 415 Unsupported Media Type 服务器不接受该请求,因为媒体类型不被支持。...服务器不支持所需的功能。 502 Bad Gateway 未完成的请求。服务器从上游服务器收到无效响应。 503 Service Unavailable 未完成的请求。服务器暂时超载或死机。...如果您的反应包含了一个特殊的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus。

    1.5K70

    Servlet HTTP 状态码大全列表

    以下是可能从 Web 服务器返回的 HTTP 状态码和相关的信息列表: 代码 消息 描述 100 Continue 只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。...307 Temporary Redirect 所请求的页面已经临时转移到一个新的 URL。 400 Bad Request 服务器不理解请求。...当您转换一个 "post" 请求为一个带有长的查询信息的 "get" 请求时发生。 415 Unsupported Media Type 服务器不接受该请求,因为媒体类型不被支持。...服务器不支持所需的功能。 502 Bad Gateway 未完成的请求。服务器从上游服务器收到无效响应。 503 Service Unavailable 未完成的请求。服务器暂时超载或死机。...如果您的反应包含了一个特殊的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus。

    95620

    Servlet HTTP 状态码大全列表

    以下是可能从 Web 服务器返回的 HTTP 状态码和相关的信息列表: 代码 消息 描述 100 Continue 只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。...307 Temporary Redirect 所请求的页面已经临时转移到一个新的 URL。 400 Bad Request 服务器不理解请求。...当您转换一个 "post" 请求为一个带有长的查询信息的 "get" 请求时发生。 415 Unsupported Media Type 服务器不接受该请求,因为媒体类型不被支持。...服务器不支持所需的功能。 502 Bad Gateway 未完成的请求。服务器从上游服务器收到无效响应。 503 Service Unavailable 未完成的请求。服务器暂时超载或死机。...如果您的反应包含了一个特殊的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus。

    63830

    HTTP状态码

    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。...使用GET请求重定向400Bad Request客户端请求的语法错误,服务器无法理解401Unauthorized请求要求用户的身份认证402Payment Required保留,将来使用403Forbidden...,超时409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突410Gone客户端请求的资源已经不存在。...如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理415Unsupported...的请求头信息500Internal Server Error服务器内部错误,无法完成请求501Not Implemented服务器不支持请求的功能,无法完成请求502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时

    1.3K10
    领券