我使用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(错误请求)
答案 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):
我之前错过了这个,但如果我发出某种警告会有所帮助。