gpt4 book ai didi

java - 当 ReSTLet 应该返回 400 Bad Request 时,它是否返回 415 Unsupported Media Type?

转载 作者:搜寻专家 更新时间:2023-10-31 20:23:47 25 4
gpt4 key购买 nike

我正在使用 ReSTLet 2.1 和 jackson 来构建一个 json REST api。

当我使用预期的内容类型发出请求但正文格式错误时,我会返回 415“不受支持的媒体类型”状态代码。我认为正确的错误码应该是400“Bad Request”。

显然,当 Jackson 尝试解码垃圾但失败时,就会发生混淆。

我会尝试用一些代码使情况更清楚:

// java method mapping
@Post("json")
public Project create(Project project) {

使用curl调用服务

$ curl -i -XPOST -H 'content-type: application/json' -d '{xgarbage}' http://localhost:8080/projects HTTP/1.1 415 Unsupported Media Type

以及日志中记录的堆栈跟踪操作系统片段:

Nov 29, 2010 9:51:56 PM org.restlet.ext.jackson.JacksonRepresentation getObject
WARNING: Unable to parse the object with Jackson.
org.codehaus.jackson.JsonParseException: Unexpected character ('x' (code 120)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: java.io.ByteArrayInputStream@693e4a5a; line: 1, column: 2]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:929)

服务的实际实现从未受到影响,因此在某处做出将乱码内容映射到 415 的决定。

现在,我的问题是:这是正确的吗?如果我正确阅读了“RESTful Web 服务”一书中的以下引述,则事实并非如此,但我愿意接受更正。

[400 Bad Request] It’s commonly used when the client submits a representation along with a PUT or POST request, and the representation is in the right format, but it doesn’t make any sense.

.

[415 Unsupported Media Type] If the client sends a document that’s got the right media type but the wrong format (such as an XML document written in the wrong vocabulary), a better response is the more generic 400 (“Bad Request”)

无论对错,我宁愿返回 400。

有没有办法在不放弃 Jackson 提供的自动魔术序列化的情况下改变行为?

非常感谢任何帮助,谢谢!

最佳答案

415 是正确的,因为请求是正确的格式,如果它无论如何都已损坏。例如不可解析的 JSON 或 XML。根据定义,格式错误的 JSON 或 XML 不是 JSON 或 XML,因此是不受支持的媒体类型,Jackson 无法知道它应该是 JSON,它只知道它不是' t 它可以解析的 JSON。

官方documentation对此非常清楚。

10.4.16 415 不支持的媒体类型

服务器拒绝为请求提供服务,因为请求实体的格式不受所请求方法所请求资源的支持。

你说,嘿,这是 JSON,但它不是,所以服务器说,嘿,我得到的不是 JSON,并且不受此资源支持。

关于java - 当 ReSTLet 应该返回 400 Bad Request 时,它是否返回 415 Unsupported Media Type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4308672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com