在ReST API查询参数中将是/否映射为布尔值
我试图在JAX-RS url查询参数中将在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项:
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