2016-04-24 7 views
2

Ich kann keine benutzerdefinierte Validierung mit Spring MVC arbeiten. Ich habe eine eigene Annotation für Parameter und einen eigenen Validator implementiert (alles ist unten angegeben), aber die Validierung findet nie statt. Irgendwelche Ideen würden wirklich geschätzt werden.Benutzerdefinierte Validierung für RequestParam funktioniert nicht mit Spring MVC

-Controller

@Validated 
@RestController 
public class FooController { 

    @RequestMapping(value = "/somepath", 
        method = RequestMethod.GET, 
        produces = MediaType.APPLICATION_JSON_VALUE) 
    @ResponseStatus(HttpStatus.OK) 
    public String get(@CustomParam @RequestParam(String fooParam) { 
     return "Hello"; 
    } 

} 

Benutzerdefinierte Request Parameter

@Documented 
@Constraint(validatedBy = CustomValidator.class) 
@Target({ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface CustomParam { 

    String message() default "Wrong!"; 

    Class<?>[] groups() default {}; 

    Class<? extends Payload>[] payload() default {}; 

} 

Individuelle Validator

@Component 
public class CustomValidator implements ConstraintValidator<CustomParam, String> { 

    @Override 
    public void initialize(CustomParam param) {} 

    @Override 
    public boolean isValid(String givenParam, ConstraintValidatorContext context) { 
     // some custom validation is here, never enter this method though 
    } 

} 

Antwort

0

Scheint, ich habe hier was falsch gemacht. Da ich Spring Boot verwende, verwendet es standardmäßig den Hibernate-Validator. Um dies zu beheben, folgte ich this Antwort und änderte nur meine Spring-Konfiguration mit dem Hinzufügen der Bohnen.

@Bean 
public Validator validator() { 
    return new LocalValidatorFactoryBean(); 
} 

@Bean 
public MethodValidationPostProcessor methodValidationPostProcessor() { 
    MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor(); 
    methodValidationPostProcessor.setValidator(validator()); 
    return methodValidationPostProcessor; 
} 
Verwandte Themen