使用Bean验证验证资源数据

时间:2015-07-02 14:05:30

标签: java rest jersey jax-rs bean-validation

我使用Jersey 2.19来实现REST API,但是我很难让资源验证按预期工作。

我的资源看起来像这样。

@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes("application/x-www-form-urlencoded")
public Response test(@NotNull @FormParam("test-param") String testParam, String body)
{
    String response = "test-param is: " + testParam + "\n" + "body is: " + body + "\n";
    return Response.status(Response.Status.OK).entity(response).build();
}

当我发出以下cURL请求时:

curl -X POST http://192.168.50.112:8080/myapp/test-validation --data invalid-param=invalid

我在终端窗口中收到以下回复:

test-param is: null
body is: invalid-param=invalid

即。 test-param的值为null,但未按Java EE tutorial中的定义抛出任何异常。

  

如果是javax.validation.ValidationException或者是其中的任何子类   除了引发ConstraintValidationException之外的ValidationException,   JAX-RS运行时将使用500响应客户端请求   (内部服务器错误)HTTP状态代码。

     

如果抛出ConstraintValidationException,JAX-RS运行时将会   使用以下HTTP状态代码之一响应客户端:

     如果抛出异常,则

500(内部服务器错误)   验证方法返回类型

     在所有其他情况下

400(错误请求)

2 个答案:

答案 0 :(得分:0)

尝试map代替public Response test(@FormParam("test-param") @NotNull String testParam, String body)代表public Response test(@NotNull @FormParam("test-param") String testParam, String body) @NotNull

答案 1 :(得分:0)

我只是偶然发现了答案。 Jersey User Guide的第18章指出

  

Jersey中的Bean Validation支持作为扩展模块提供   并且需要在pom.xml文件中明确提及(如果是   使用Maven):

我之前错过了这个,但如果我发出某种警告会有所帮助。