gpt4 book ai didi

java - 使用 Spring @Validated 注解验证获取请求路径变量

转载 作者:行者123 更新时间:2023-11-30 02:22:36 29 4
gpt4 key购买 nike

我尝试使用 Spring Validator 和 @Validated 注释来验证 Get Request 参数,但无法运行 validator 。我正在使用 ModelAttribute 尝试让 validator 在路径变量而不是请求正文上运行。是否可以在获取请求路径变量上运行 validator ?

这是我的 Controller 类和方法

@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;
}

}

以及 validator 类

@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

}

}

到达端点时,两个打印语句都不会执行。

任何有关我可能缺少的内容或不同做法的帮助将不胜感激,谢谢!

最佳答案

您可以按如下方式实现所需的验证功能。

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;
}
}

-

@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 {};
}

-

@RequestMapping(value = "/profile/{param}", method = RequestMethod.GET)
public IVRProfile getProfile(@Valid @ParamConstraint @ModelAttribute("param") String param) {
return sampleProfile();
}

最后不要忘记使用 @Validated 注释 Controller。

@RestController
@Validated
public class ProfileController {
//...
}

您可以在提到的示例 here 中找到更多详细信息.

关于java - 使用 Spring @Validated 注解验证获取请求路径变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46394852/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com