spring - Spring - 在我自己的用于验证的注释中返回我的 onw 异常
问题描述
我有我的 onw 注释:
@Constraint(validatedBy = {MaxDateValidator.class})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface MaxDate {
和我的验证器:
@RequiredArgsConstructor
public class MaxDateValidator implements ConstraintValidator<MaxDate, LocalDate> {
@Override
public void initialize(MaxDate constraintAnnotation) {
...
}
@Override
public boolean isValid(LocalDate date, ConstraintValidatorContext constraintValidatorContext) {
//I want to throw my onw exception here with some hint to be read by
frontend
if(condition){
throw new MyException("message", HINTS.WRONG_DATE);
}
return someCondition();
}
}
我的问题是是否可以在 isValid 方法中抛出我自己的异常?我在来自前端的 Dto 中的某个字段上设置了自己的注释 @MaxDate,在某些情况下,我想在这里抛出我自己的异常,并带有一些提示供前端读取并显示一些验证消息。
或者也许我应该完全删除这个注释并在我的服务方法中做一些验证?
解决方案
从isValid
方法中抛出你自己的异常不是一个好主意,因为按照约定,这个方法不应该抛出任何异常(顺便说一下应该是线程安全的)。要自定义此验证器引发的异常,您可以使用标准机制,例如:
String message() default "your message";
在 MaxDate 注释中添加字段。- 像这样使用 ConstraintValidatorContext:
if(condition){ context.disableDefaultConstraintViolation(); context.buildConstraintViolationWithTemplate("Your message").addConstraintViolation(); return false; }
推荐阅读
- r - 根据if语句重复R中的单元格值
- html - 在 VS 中调试 ASP.NET Web 应用程序时未加载图像文件
- html - Boostrap 4.5.2 导航栏下拉菜单出现在错误的位置
- angular - 如何以角度为 bpmn-js 中的一个元素着色
- visual-studio - 安装旧版本的 Visual Studio 2019
- flutter - 延迟后如何更改材质按钮的状态?
- linux - 找不到 Google Compute Engine 虚拟机的 CPU 频率
- reactjs - MobX Observable map 存储 observables 地图
- javascript - jQuery post 没有触发 PHP 脚本
- default - CPLEX(默认)无法提取表达式