Java JAX-RS布尔vs int
我有一个接受布尔值的方法Java JAX-RS布尔vs int,java,web-services,annotations,boolean,jax-rs,Java,Web Services,Annotations,Boolean,Jax Rs,我有一个接受布尔值的方法 @GET @Path("/updatePassword/{userid}/{password}/{resetTemporary}") @Produces(MediaType.APPLICATION_JSON) public boolean updatePassword(@PathParam("userid") String userid, @PathParam("password") String password, @PathParam("resetTemporary
@GET
@Path("/updatePassword/{userid}/{password}/{resetTemporary}")
@Produces(MediaType.APPLICATION_JSON)
public boolean updatePassword(@PathParam("userid") String userid, @PathParam("password") String password, @PathParam("resetTemporary") boolean resetTemporary) {
boolean result = false;
if (!StringUtilities.stringEmptyOrNull(userid, password)) {
result = factory.updatePasssword(userid, password, resetTemporary);
logger.info("Updated user password for user " + userid+ " Action completed = " + result);
}
return result;
}
在我的url中进行了一些测试/处理之后,我发现实际上我可以传递一个int而不是布尔值。有趣的是,无论我通过了1还是0,它都是假的
这是因为该值未被识别,因此默认为false。如果是,如何强制调用方使用true/false表达式
谢谢经过一点测试,将
1
传递到resetTemporary
(或类似的boolean
字段)将始终导致false
,无论您使用@PathParam
还是@QueryParam
要强制调用者使用“true/false”表达式,您可能需要将参数更改为字符串
,并输入预期为“true”
或为“false”
的验证代码,并在出现其他错误时抛出错误
更新:考虑其他一些可能性
- 我在上面提到了一个
,但它不一定是字符串。您可以从中收集所需信息的任何类型都可以字符串
- 您还可以将REST方法分为两种方法(例如,
和updatePassword
,根据变量名)。这两个方法可能非常相似,并调用相同的helper方法,但是每个方法都知道resetPassword
参数的值,并且能够相应地执行操作resetTemporary
就我个人而言,我赞成第二种方法。布尔参数通常表示一个方法正在做两件独立的事情(尽管可能非常相似)。将它们一分为二将确保每个方法都在做一件事,并从每个方法中删除一个参数,
resetTemporary
,从而降低复杂性。当您说“它仍然返回为false”时,您的意思是updatePassword返回为false还是您的参数resetTemporary始终为false?参数始终为false