JAX-RS boolean vs int

时间:2014-08-07 14:28:01

标签: 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") 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;
}

在我的网址中进行一些测试/播放之后,我实际上可以传递一个int而不是一个布尔值。有趣的是,无论我是通过1还是0,它仍然是假的。

这是因为该值未被识别,因此默认为false,如果是这样,您如何强制调用者使用true / false表达式?

谢谢

1 个答案:

答案 0 :(得分:1)

经过一些测试后,无论您使用的是1,还是将resetTemporary传递到boolean(或类似的false字段)都会产生@PathParam@QueryParam

要强制调用者使用“true / false”表达式,您可能需要将参数更改为String并输入需要"true""false"并且抛出的验证代码错误是其他事情发生的。

更新:考虑其他一些可能性。

  • 我在上面提到String,但它不一定是字符串。您可以从中收集所需信息的任何类型都可以。
  • 您还可以将REST方法拆分为两种方法(例如updatePasswordresetPassword,以您的变量名称命名)。这两个方法可能非常相似,并且调用相同的辅助方法,但每个方法都会知道resetTemporary参数的值,并且能够相应地采取行动。

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