0

次のような 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 を返すようにするにはどうすればよいですか?

4

1 に答える 1