在ReST API查询参数中将是/否映射为布尔值

在ReST API查询参数中将是/否映射为布尔值,rest,jax-rs,Rest,Jax Rs,我试图在JAX-RS url查询参数中将yes/no,true/false,Y/N映射到布尔值,但它仅成功映射true/false,所有其他值始终映射到false 我理解在映射url查询参数时,jAX-RS试图找到给定的数据类型构造函数,该构造函数接受string参数,并根据构造函数的操作将查询参数转换为声明的数据类型的对象。布尔类将true/true视为true,并将所有其他值视为false 有没有办法将是/否,是/否映射到真/假?您可以将布尔值包装在以下方面。在下面的示例中,我实现了第3项:

我试图在JAX-RS url查询参数中将
yes/no
true/false
Y/N
映射到布尔值,但它仅成功映射
true/false
,所有其他值始终映射到false

我理解在映射url查询参数时,jAX-RS试图找到给定的数据类型构造函数,该构造函数接受string参数,并根据构造函数的操作将查询参数转换为声明的数据类型的对象。布尔类将
true/true
视为true,并将所有其他值视为false


有没有办法将
是/否
是/否
映射到
真/假

您可以将布尔值包装在以下方面。在下面的示例中,我实现了第3项:

@Path("/booleanTest")
public class TestClass {

    @GET
    public String test(@QueryParam("value") FancyBoolean fancyBoolean) {
        String result = "Result is " + fancyBoolean.getValue();
        return result;
    }

    public static class FancyBoolean {
        private static final FancyBoolean FALSE = new FancyBoolean(false);
        private static final FancyBoolean TRUE = new FancyBoolean(true);
        private boolean value;

        private FancyBoolean(boolean value) {
            this.value = value;
        }

        public boolean getValue() {
            return this.value;
        }

        public static FancyBoolean valueOf(String value) {
            switch (value.toLowerCase()) {
                case "true":
                case "yes":
                case "y": {
                    return FancyBoolean.TRUE;
                }
                default: {
                    return FancyBoolean.FALSE;
                }
            }
        }
    }
}

访问
/booleanstest?value=yes
/booleanstest?value=y
/booleanstest?value=true
将返回
结果为true
,任何其他值都将返回
结果为false
,使用查询字符串booleanstest只是违反了单一责任原则,因为你强迫你的函数做不止一件事。我建议这种风格适合RESTful:

@GET("/someValue=true")
@GET("/someValue=false")
这意味着您可以定义两个端点,而不是一个端点:),在这种情况下,任何函数都只关注其业务,不需要检查false/true