java - 使用自定义 validator 时忽略 spring 验证注释

标签 java spring validation annotations

我正在尝试将带注释的验证规则与一些自定义验证结合起来。我有一个详细信息实体,如下所示:

public class DetailsEntity {    
    @NotEmpty(message = "Name is required")
    private String name;
    private String customField;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCustomField() {
        return customField;
    }

    public void setCustomField(String customField) {
        this.customField = customField;
    }
}

然后我有一个如下所示的 Controller :

@Controller
public class EntityController {

    @RequestMapping(value = "/create", method = RequestMethod.POST)
    public @ResponseBody DetailsEntity create(@RequestBody @Valid
        DetailsEntity details) {
        //Do some creation work
    }
}

这一切开箱即用,效果很好。问题是当我尝试将自定义 validator 与我的实体一起使用时。我的 validator 如下所示:

@Component
public class EntityValidator implements Validator {

    @Override
    public boolean supports(Class<?> aClass) {
        return aClass.isAssignableFrom(DetailsEntity.class);
    }

    @Override
    public void validate(Object o, Errors errors) {
        DetailsEntity entity = (DetailsEntity) o;
        if (entity.getCustomField().equals("Some bad value")) {
            errors.reject("Bad custom value supplied");
        }
    }
}

我尝试通过两种方式注入(inject) validator 。一种是使用@InitBinder在 Controller 中,另一个是在 spring 配置中设置全局 validator ( <mvc:annotation-driven validator="entityValidator" /> )。无论我这样做,自定义 validator 都可以正常工作,但是我的 @NotEmpty注释被忽略。如何同时使用注释和自定义 validator ?

最佳答案

使用 SpringValidatorAdapter 作为自定义 validator 的基类并覆盖 validate() 方法:

public void validate(Object target, Errors errors) {
                // check JSR-303 Constraints
        super.validate(target, errors);
                // Add you custom validation here.

    }

或者在自定义 validator 中注入(inject) LocalValidationFactoryBean 并在自定义验证之前或之后调用 validate(target, error)。

关于java - 使用自定义 validator 时忽略 spring 验证注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817281/

相关文章:

php - 在注册表中标记用户输入的错误字段的推荐方法?

java - Win7 上的 CheckboxTableViewer 中的选择不起作用

java - 什么时候并行执行任务是一种矫枉过正的行为?

Java泛型类型转换

spring - 如何处理pom.xml中的 "omitted for conflict with.."消息?

java - 在Spring中使用@QueryParam

spring - 注释为 ResponseStatus 的自定义异常的动态消息

java - 线程中的异常 "main"java.net.SocketException : Connection reset

angular - 错误 : Expected validator to return Promise or Observable

xml - 如何在 ActionScript 中针对 XML 架构测试 XML 的有效性?