java - Jersey,JSR 303 验证 - ValidationError 中的自定义 "path"和 "invalidValue"

标签 java validation jersey jax-rs bean-validation

我正在使用 Jersey (JAX-RS) 并尝试实现验证。当发生验证错误时,我的应用程序返回的响应有问题。现在响应看起来像这样:

[{
    "message": "Custom message",
    "messageTemplate": "{custom.message.template}",
    "path": "SomeJerseyResource.resourceMethod.arg0.names[0]",
    "invalidValue":"[value1, value2]"
}]

其中“SomeJerseyResourceClass.resourceMethod”是 JAX-RS 资源:

public class SomeJerseyResource {
    @POST
    @Path("/path")
    public Response resourceMethod(@Valid RequestModel request) {
        /** method body **/
    }
}

并将验证约束分配给 RequestModel 中的 getter:

public class RequestModel {

    private List<String> names = new ArrayList<>();

    @MyConstraint
    public List<String> getNames() {
        return tags;
    }
}

我有一个自定义的 ConstraintValidator,我在其中验证该列表的每个元素。

问题

  • 我不想在响应的“路径”字段中包含资源和方法名称。代替 SomeJerseyResource.resourceMethod.arg0.names[0] 我只想要 arg0.names[0]。客户端不知道服务器类和方法,当他收到这样的响应时,他将无法正确地将错误分配给字段。
  • 我想自定义响应的“invalidValue”字段。更具体地说,只有无效的元素值,而不是该字段中的整个列表。

我没有找到任何简单的方法来做到这一点。你有什么想法吗?

最佳答案

你可以写一个 ExceptionMapper<ConstraintViolationException> 返回 Response你喜欢的。 Jersey 使用 ExceptionMapper<ViolationException> . ConstraintViolationExceptionViolationException 延伸,所以你的映射器更具体,并且会优先选择映射器。 Jersey 的映射器,将响应返回为 ValidationError ,所以 body 才会这样。但是你可以随心所欲地制作它。

如果您只想要 invalidValue列表,然后遍历 ConstraintViolation来自 ContraintViolationException.getConstraintViolations() , 并得到 invalidValue来自 ConstraintViolation .

关于java - Jersey,JSR 303 验证 - ValidationError 中的自定义 "path"和 "invalidValue",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28529204/

相关文章:

javascript - jQuery 验证插件 : How can I add groups to a validator after its been initialized?

java - Selenium WebDriver 在线程 "main"org.openqa.selenium.ElementNotInteractableException 中抛出异常

java - 导出 JAR 源图像

python - Django rest框架和模型验证

javascript - 以编程方式选择文本输入字段内的部分

java - 使用 Springservlet 实现 Weblogic Rest 服务

java - 如何更改 Dropwizard REST 服务的响应内容类型?

java - 如何使用 Jersey Client 2.2.x 取消挂起的异步请求并取消注册调用回调?

java - 通过堆叠各种 block 来 build 最高的塔?

java - 使用 struts2 预填充表单元素并进行验证错误