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

rsu*_*dha 4 rest jax-rs

我试图映射yes/no,true/false,Y/N在JAX-RS网址查询参数一个布尔值,但它仅映射true/false所有其他的值映射到错误的所有的时间成功.

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

有没有一种方法来映射yes/no, y/ntrue/false

Bog*_*dan 5

你可以在一个尊重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;
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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