java - 在实现 org.springframework.validation.Validator 时随时访问 Headers
问题描述
我有一个 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);
推荐阅读
- javascript - 如何使用 Javascript 显示模态图像 - 但也有一个伪叠加
- angular - $ ng gs 服务/数据 --module=app.module
- reactjs - ReactJS 状态更新落后一步
- sed - 使用 sed 替换 GCS json 文件中的日期时间值
- sql - 将表中具有特定值的一列分成两列
- javascript - 我们可以在生成器中返回一个方法吗?
- reactjs - 使用键值对填充反应组件中的选项
- c - 当我运行代码时,为什么在创建第一个形状后,在过渡到第二个形状时会留下很大的间隙?
- javascript - 如何在没有本地主机的情况下打开网页
- python - 我尝试添加应该询问用户是否想再次播放的代码