Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设计采用布尔参数的RESTAPI的正确方法是什么?_Java_Rest - Fatal编程技术网

Java 设计采用布尔参数的RESTAPI的正确方法是什么?

Java 设计采用布尔参数的RESTAPI的正确方法是什么?,java,rest,Java,Rest,基本上我有一个rest API,如下所示: /api/drive 它需要一个体来表示PUT,它是“true”还是“false” 我在Java中使用dropwizard框架,boolean drive是我资源类的PUT方法中的一个参数 一切都按预期进行,但我在Postman上进行了测试,发现即使我在请求体中添加了另一个值,如“notABoolean”,请求本身仍然是成功的。它只是把它当作“假”。这是否符合REST原则,或者如果正文不是真/假,抛出400错误请求是否更有意义 这是否符合REST原则

基本上我有一个rest API,如下所示:

/api/drive
它需要一个体来表示PUT,它是“true”还是“false”

我在Java中使用dropwizard框架,
boolean drive
是我资源类的
PUT
方法中的一个参数

一切都按预期进行,但我在Postman上进行了测试,发现即使我在请求体中添加了另一个值,如“notABoolean”,请求本身仍然是成功的。它只是把它当作“假”。这是否符合REST原则,或者如果正文不是真/假,抛出
400错误请求
是否更有意义

这是否符合REST原则,或者如果主体不是真/假,抛出400错误请求错误是否更有意义

“视情况而定”

这是一个非常合理的
text/plain
文档,但它不是有效文档

正如Mike所指出的,
Boolean.valueOf(“notABoolean”)
有一个定义良好的值;如果您以一种显式限制这种情况的方式描述了您的API,那么您将得到您所得到的

至少有三种可能的状态代码可以处理此情况

这就是你所期待的——它大致可以翻译为“是的,数据就是你所说的,但这在这里真的没有任何意义”

如果您要描述您的API,使得只有
application/json
是合理的,那么此测试可能会产生(因为客户端发送
text/plain
)或(因为
notABoolean
不是有效的json值)

当然,字符串是有效的json值,因此下面的有效负载可能会使您陷入相同的困境

"notABoolean"
这是一种可以接受的类型,它是有效的,但是你回到了422列车上


要让DropWizard“免费”为您返回422,请查看上的文档。

如果将非布尔值视为
false
值,则可以。让API超严格是不好的,因为这会让使用它的人很难理解。如果类型真的不应该被允许的话,只抛出
400个错误请求<代码>“True”
1
True
被转换为
布尔值True
,只要您的API契约指定了该行为,就可以遵循REST库所做操作的基本语义(即
boolean.valueOf()
)。400似乎有些过分,因为你可以清楚地处理简单的真与假之外的值;只有当值完全丢失时才返回400才更有意义。
"notABoolean"