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

时间:2014-12-23 08:56:44

标签: rest jax-rs

我正在尝试将yes/notrue/falseY/N映射到JAX-RS网址查询参数中的布尔值,但它仅成功映射true/false,所有其他值始终映射为false。

我理解在映射url查询参数时,jAX-RS会尝试查找带有字符串参数的给定数据类型构造函数,并根据构造函数的操作将查询参数转换为声明的数据类型的对象。 Boolean类确实将true/TRUE视为true,并将所有其他值视为false。

有没有办法将yes/noy/n映射到true/false

2 个答案:

答案 0 :(得分:5)

你可以在一个尊重the QueryParam javadoc的东西中包含一个布尔值。在以下示例中,我实现了第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;
                }
            }
        }
    }
}

访问/booleanTest?value=yes/booleanTest?value=y/booleanTest?value=true将返回Result is true,任何其他值都将返回Result is false

答案 1 :(得分:0)

使用查询字符串布尔值仅违反单一职责原则,因为您强迫函数执行多项操作。我建议将这种样式用于RESTful:

@GET("/someValue=true")
@GET("/someValue=false")

这意味着您不必定义两个端点,而是定义两个:),在这种情况下,任何功能都只专注于其业务,而无需检查false / true。