我正在尝试将yes/no
,true/false
,Y/N
映射到JAX-RS网址查询参数中的布尔值,但它仅成功映射true/false
,所有其他值始终映射为false。
我理解在映射url查询参数时,jAX-RS会尝试查找带有字符串参数的给定数据类型构造函数,并根据构造函数的操作将查询参数转换为声明的数据类型的对象。 Boolean类确实将true/TRUE
视为true,并将所有其他值视为false。
有没有办法将yes/no
,y/n
映射到true/false
?
答案 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。