次のような CXF RS Rest Resource があります。
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 クライアントは、最小値が0.01 、最大値がxxxxx.yyの 5 桁と 2 つの端数のdoubleとして重みを入力することを期待しています。
weight の値を0としてこの REST リソースをテストすると、 Weight should be maximum of 0.01というメッセージが表示された400 BAD REQUESTが表示されますが、これは正しいです!
しかし、重みの値を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)
入力型をdoubleではないと認識し、データ型に対しても検証するべきではありませんか? AB のような入力文字列に対しても 400 を返すようにするにはどうすればよいですか?