【发布时间】:2022-12-07 21:05:11
【问题描述】:
我有一个简单的控制器,它接受 String 作为RequestBody
@RequestMapping(value = "/test", method = RequestMethod.POST)
public ResponseEntity doSmth(@RequestBody @ValidTest String val) {
//do something
return ResponseEntity
.status(HttpStatus.OK)
.body("saved");
}
但由于某种原因val param 没有被TestConstraintValidator.class验证
@Documented
@Constraint(validatedBy = TestConstraintValidator.class)
@Target({PARAMETER})
@Retention(RUNTIME)
public @interface ValidTest{
String message() default "Invalid";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
甚至可以选择验证这一点吗?或者我需要用自定义类包装这个 String 吗?并在那里验证它?
public class TestConstraintValidator implements ConstraintValidator<ValidTest, String> {
@Override
public void initialize(ValidTest constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
}
@Override
public boolean isValid(String val, ConstraintValidatorContext constraintValidatorContext) {
return false;
}
}
【问题讨论】:
-
您确定
TestConstraintValidator中的代码没有被触发吗?你可以发布代码吗? -
@ALex 是的,我确定。我已将
@ResponseBody更改为自定义对象,它只有一个字段。在这个文件的顶部,我添加了注释,它已经开始工作了。但正如我的帖子所述,我不想将它包装在对象中
标签: java spring spring-boot