【问题标题】:Bean Validation on JAX-RS doesn't block an invalid requestJAX-RS 上的 Bean 验证不会阻止无效请求
【发布时间】:2016-01-19 01:15:57
【问题描述】:

我有一个简单的 JAX-RS 服务,带有 JSR-303 注释:

@Path("/settings")
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@ValidateRequest
public interface SettingsRestService {

    @POST
    SettingsResponse saveSetting (@Valid @NotNull Setting setting);
}

我的Settings班级:

public class Setting {

    @NotNull(message = "Field key must exist.")
    @Pattern(regexp = "^[\\w]+$", 
        message = "Field key must only contain alphanumeric characters and underscores.")
    private String key;

    @NotNull(message = "Field value must exist.")
    @Size(min = 1, message = "The value of the setting must be at least 1 character.")
    private String value;

    ...
}

当我将以下 JSON 对象发送到我的端点时:

{
    "key": "aKey+",
    "value": "aValue"
}

我收到此回复:

{
    exception: null
    fieldViolations: [0]
    propertyViolations: [0]
    classViolations: [0]
    parameterViolations: [1]
      0: {
           constraintType: "PARAMETER"
           path: "SettingsRestService#saveSetting(arg0).key"
           message: "Field key must only contain alphanumeric characters and underscores."
           value: "aKey+"
         }-
      -
    returnValueViolations: [0]
}

即使验证有效,请求仍会通过服务并由应用程序的其余部分处理。

任何想法为什么这不会被阻止?我是否需要额外的配置来处理验证?

WAR 部署在 JBoss 6.3.3.GA 上,我们使用 Hibernate Validator 4.3.2.Final-redhat-1 和 resteasy-jaxrs-3.0.9.Final。

【问题讨论】:

  • 显示堆栈跟踪。
  • 我的日志中没有看到任何内容。还有其他想法吗?
  • 我看不出这种行为的原因:请求仍然通过服务并由应用程序的其余部分处理
  • 我不确定这是否与我们遇到的类似问题有关。似乎我们的 JBoss 版本捆绑了一个有缺陷的 hibernate-validator 版本。我们之前遇到过一些问题,他们的验证甚至都没有触发。但这一次,验证似乎触发了,而不是阻塞。

标签: java jax-rs bean-validation


【解决方案1】:

在我们的例子中,拦截器似乎“隐藏”了从 resteasy 抛出的异常。我还没有找到“为什么”,但如果我有更新,我会告诉你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多