我们有一个 RESTful 架构,我有一个关于我们 API 的异常和 http 状态的问题。
我们使用400
适用案例:
- 值不匹配(例如,预期为 100,但实际为 99)
- 违反@Size、@Min、@Max、@Nullable 等
使用422
(无法处理的实体)适用于逻辑出现问题但不是客户端错误的情况。例如,尝试将类别设置为已有的产品。这在客户端是不可预测的。
最后,我们使用409
(冲突)适用于客户端错误的情况。
例如,如果他尝试发送无效的 Date
格式通过JSON
。或者注册日期远远早于当前日期。
但有一个案例可以分为以下几类:
我们有一个Tax
字段为整数。
如果客户端发送小数 Tax
那么应该抛出异常。
从一方面来看,这显然是 400
并且客户应该看到“税不能是分数”。
但是,从另一面来看 - 这是客户端程序员的错误,因为他试图发送 double /浮点而不是整数/长整型(即他发送另一种类型,就像传递Long而不是String)并且应该抛出409。
我应该选择什么:400
或409
对于 TypeMismatch
在Numbers
案件?
如果 400
,为什么我应该为 Number 类型辩解,但抛出 409
对于 Date/String
案例TypeMismatch
?
我更喜欢有明确逻辑的答案,而不是“我认为”。这不是讨论。
最佳答案
我同意基于意见的问题评论,但我也会将其抛出:
关于java - REST 的 4xx http 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30029710/