Bla*_*keM 2 java validation spring spring-boot
我尝试使用 Spring Validator 和 @Validated 注释来验证 Get Request 参数,但无法运行验证器。我正在使用 ModelAttribute 尝试让验证器在路径变量而不是请求正文上运行。是否可以在获取请求路径变量上运行验证器?
这是我的控制器类和方法
@RestController
public class ProfileController {
@RequestMapping(value = "/profile/{param}", method = RequestMethod.GET)
public IVRProfile getProfile(@Validated(ParamValidator.class) @ModelAttribute("param") String param) {
return sampleProfile();
}
@ModelAttribute("param")
public String paramAsModelAttribute(@PathVariable String param) {
return param;
}
}
Run Code Online (Sandbox Code Playgroud)
和验证器类
@Component
public class ParamValidator implements Validator
{
@Override
public boolean supports(Class<?> clazz)
{
System.out.println("Validator supports test");
return String.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors)
{
System.out.println("Validator Test");
// Validation code
}
}
Run Code Online (Sandbox Code Playgroud)
当到达端点时,两个打印语句都不会被执行。
对于我可能缺少的内容或采取不同的做法的任何帮助将不胜感激,谢谢!
您可以按如下方式实现所需的验证功能。
public class ParamValidator implements ConstraintValidator<ParamConstraint, String> {
@Override
public void initialize(ParamConstraint paramConstraint) {
}
@Override
public boolean isValid(String paramField, ConstraintValidatorContext cxt) {
//Perform paramField validation
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
-
@Documented
@Constraint(validatedBy = ParamValidator.class)
@Target( { ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamConstraint {
String message() default "Default validation message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)
-
@RequestMapping(value = "/profile/{param}", method = RequestMethod.GET)
public IVRProfile getProfile(@Valid @ParamConstraint @ModelAttribute("param") String param) {
return sampleProfile();
}
Run Code Online (Sandbox Code Playgroud)
最后不要忘记用 注释 Controller @Validated
。
@RestController
@Validated
public class ProfileController {
//...
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处提到的示例中找到更多详细信息。
归档时间: |
|
查看次数: |
9089 次 |
最近记录: |