在实现org.springframework.validation.Validator时随时访问标头



我有一个Spring Boot应用程序,需要根据头值对请求的字段进行一些验证。

所以像任何其他Spring Boot应用程序一样,我的休息控制器中的入口点看起来像

public ResponseEntity<Mono<MyResponse>> myOperation(MyRequest request, String another_parameter)

我的问题是,为了进行验证,我正在考虑使用org.springframework.validation.Validator

每当你想实现上面的接口时,你必须做一些类似的事情:

public class WebsiteUserValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return MyRequest.class.equals(clazz);
}
@Override
public void validate(Object obj, Errors errors) {
MyRequest user = (MyRequest) obj;
if (checkInputString(MyRequest.getSomeField())) {
errors.rejectValue("someField", "someField.empty");
}
}
private boolean checkInputString(String input) {
return (input == null || input.trim().length() == 0);
}
}

我想获得validate方法实现中的头。

如何做到这一点?(可以说,任何时候都可以拿到标题(。

我认为使用javax.validation.ConstraintValidator<A extends Annotation, T>会更好。例如注释

@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy ={SexConstraintValidator.class} )
public @interface Sex {
//default error message
String message() default "default error message";
//groups
Class<?>[] groups() default {};
//payload
Class<? extends Payload>[] payload() default {};
}

SexConstraintValidator

public class SexConstraintValidator implements ConstraintValidator<Sex,String> {
@Override
public void initialize(Sex constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
boolean isValid =doSomeValided();
return isValid;
}
}

验证对象

public class ValidateObject {
@Sex(message="error message")
private String sex;
// ...
}

验证方法

import org.springframework.validation.annotation.Validated;
public ResponseEntity<Mono<MyResponse>> myOperation(@Validated ValidateObject request, String another_parameter)

或者像这个一样验证手册

ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Set<ConstraintViolation<ValidateObject>> validate=validatorFactory.getValidator().validate(validateObject);

最新更新