我有一个 CXF RS 休息资源,看起来像这样:
public class SomeRestResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("path")
public Response getResource(
@DecimalMin(value = "0.01", message="Weight should be minimum {value}.")
@Digits( integer = 5, fraction = 2, message = "Weight should be maximum of {integer} integer and {fraction} fractional digits." )
@QueryParam("weight") double weight)
// do some operations with weight here...
}
}
我期望 REST 客户端以xxxxx.yy格式输入权重作为最小值为0.01和最大值为 5 位和 2 个小数的双精度数。
当我使用 weight 的值为0测试此 REST 资源时,它给了我一个400 BAD REQUEST消息Weight should be maximum of 0.01这是正确的!
但是,当我将 weight 的值输入为AB时,它在客户端给了我一个404 NOT FOUND,并且失败并出现以下 Java 异常:
Caused by: java.lang.NumberFormatException: For input string: "AB"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
at java.lang.Double.valueOf(Double.java:504)
at org.apache.cxf.common.util.PrimitiveUtils.read(PrimitiveUtils.java:75)
at org.apache.cxf.jaxrs.utils.InjectionUtils.handleParameter(InjectionUtils.java:361)
它不应该将输入类型识别为不是双精度并针对数据类型进行验证吗?我应该怎么做才能为 AB 之类的输入字符串返回 400?