首页 > 解决方案 > 如何确定 ConstraintViolation 是来自 JSON 属性还是来自 URL 参数?

问题描述

我有一个代码可以从用户那里获取数据并验证它是否有效。

验证是针对来自 的数据URL和来自 的数据JSON

问题是,如果URL路径字段包含arg0并且它需要我从以下位置获取它message

@ValidId (message = "The field is invalid")
private Long field;

字段的注释。

在这种情况下JSON,我可以简单地从path.substring(path.lastIndexOf('.') + 1).

IE

protected String buildErrorMessage(ConstraintViolation<?> violation) {
    String path = violation.getPropertyPath().toString();
    String field = path.substring(path.lastIndexOf('.') + 1);
    //field = `arg0` in case of url
    //field = `field` in case of JSON
}

如果我面临 ConstraintViolation - 我如何才能确定违规是来自JSONor GET


编辑

这是我调用 buildErrorMessage 的地方 -

public class ValidationExceptionMapper implements ExceptionMapper<ValidationException> {

    @Override
    public Response toResponse(ValidationException exception) {

        if (exception instanceof ConstraintViolationException) {

            final ConstraintViolationException constraint = (ConstraintViolationException) exception;

            for (final ConstraintViolation<?> violation : constraint.getConstraintViolations()) {
                String message = buildErrorMessage(violation); //HERE
            }
}

标签: javajsonrestjax-rs

解决方案


以下是一些有助于ExceptionMapper检查是否ConstraintViolationURL 中发送的无效参数JSON 有效负载中发送的无效属性相关的步骤:

请记住,参数注释,如@QueryParam@PathParam可以@MatrixParam放在方法参数、资源类字段或资源类 bean 属性中。


我建议您查看我在GitHubExceptionMapper中对for ConstraintViolationExceptionavailable 的实现。


推荐阅读