1

注釈付きの検証ルールをいくつかのカスタム検証と一緒に取り入れようとしています。次のような詳細エンティティがあります。

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
public class EntityController {

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

これはすべて、箱から出してすぐに機能します。問題は、エンティティと一緒にカスタムバリデーターを使用しようとしたときです。私のバリデーターは次のようになります。

@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");
        }
    }
}

バリデーターを2つの方法で注入してみました。1つはコントローラーでを使用し、もう1つは@InitBinderスプリング構成でグローバルバリデーターを設定します(<mvc:annotation-driven validator="entityValidator" />)。どちらの方法でも、カスタムバリデーターは正常に機能しますが、@NotEmpty注釈は無視されます。アノテーションとカスタムバリデーターの両方を使用するにはどうすればよいですか?

4

2 に答える 2

2

カスタムバリデーターの基本クラスとして使用SpringValidatorAdapterし、validate()メソッドをオーバーライドします。

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

    }

または、カスタムバリデーターを挿入し、LocalValidationFactoryBeanカスタム検証の前または後にvalidate(target、errors)を呼び出します。

于 2013-02-11T17:44:22.747 に答える
1

@NotEmptyはJSR-303アノテーションであり、HiberanteValidatorのような実装を使用する必要があり、Hibernate-Validatorjarをlibディレクトリに追加する必要があります。このjarを使用すると、@ NotEmpty、@NotNull...すべてのJSR303アノテーションを使用できます。

于 2013-02-12T05:23:16.410 に答える