【问题标题】:Validating Resource Data with Bean Validation使用 Bean Validation 验证资源数据
【发布时间】:2015-07-02 14:05:30
【问题描述】:

我正在使用 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 或任何子类 ValidationException 除了 ConstraintValidationException 被抛出, JAX-RS 运行时将使用 500 响应客户端请求 (内部服务器错误)HTTP 状态代码。

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

500(内部服务器错误)如果异常被抛出,而 验证方法返回类型

在所有其他情况下为 400(错误请求)

【问题讨论】:

  • 你能不能也从控制台提供 Curl 输出
  • --verbose 将在responsecurl 中为您提供更详细的数据,例如响应代码等
  • @AnkitNigam 请求本应被拒绝。

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


【解决方案1】:

尝试使用public Response test(@FormParam("test-param") @NotNull String testParam, String body) 而不是public Response test(@NotNull @FormParam("test-param") String testParam, String body) 意味着@NotNullafterwards @FormParam("test-param")

【讨论】:

  • 这没什么区别 - 原因是缺少 maven 依赖项。
【解决方案2】:

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

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

我只是在早些时候错过了这一点,尽管如果我有某种警告会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2012-05-05
    • 2012-01-31
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多