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
    resetPassword
    ,根据变量名)。这两个方法可能非常相似,并调用相同的helper方法,但是每个方法都知道
    resetTemporary
    参数的值,并且能够相应地执行操作

就我个人而言,我赞成第二种方法。布尔参数通常表示一个方法正在做两件独立的事情(尽管可能非常相似)。将它们一分为二将确保每个方法都在做一件事,并从每个方法中删除一个参数,
resetTemporary
,从而降低复杂性。

当您说“它仍然返回为false”时,您的意思是updatePassword返回为false还是您的参数resetTemporary始终为false?参数始终为false