基本上我有一个像这样的REST API:
/api/drive
PUT
的主体为“ true”或“ false”。
我正在使用带有Java的dropwizard框架,并且boolean drive
是资源类的PUT
方法中的参数之一。
一切正常,但是我在Postman上进行了测试,看看即使我在请求正文中放入了另一个值“ notABoolean”,请求本身仍然成功。它只是将其视为“假”。这是否符合REST原则,或者如果正文不是true / false,则抛出400 BAD REQUEST
错误更有意义吗?
答案 0 :(得分:0)
这是否符合REST原则,或者如果正文不是true / false,则抛出400 BAD REQUEST错误更有意义吗?
“取决于”。
notABoolean
这是一个非常合理的text/plain
文档,但它不是有效的application/json文档。
如Mike所述,Boolean.valueOf("notABoolean")
具有明确定义的值;如果您以明确限制这种情况的方式描述了API,那么您将获得所得到的。
至少有三种可能的状态代码可以处理这种情况。
422 Unprocessable Entity是您似乎一直期望的-粗略地翻译为“是的,数据就是您所说的,但这在这里实际上没有任何意义”。
如果要描述您的API以使仅application/json
是合理的,则此测试可能会生成415 Unsupported Media Type(因为客户端发送了text/plain
)或{{3} }(因为notABoolean
不是有效的JSON值)。
当然,字符串是有效的json值,因此下面的有效负载可能会使您陷入同一困境
"notABoolean"
这是可以接受的类型,并且有效,但是您又回到了422火车上。
要让DropWizard“免费”为您退还422,请查看400 Bad Request上的文档。