gpt4 book ai didi

java - 自定义注释验证在 spring 中不对 @pathParam 进行验证

转载 作者:行者123 更新时间:2023-11-29 04:38:43 24 4
gpt4 key购买 nike

我在@RestController 的@GET 方法中编写了一个自定义验证来验证一个id(这是一个路径参数)作为UUID,但这个验证似乎不起作用。即使在调试期间,控件也不会进行自定义验证。

    @RestController
@RequestMapping("/rateplan")
@Validated
public class RatePlanServiceController {

@RequestMapping(value = "/{ratePlanId}", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public void get(@UUID @PathVariable("ratePlanId") String ratePlanId) {

loggerFactory.warn("Get with Rate plan id {}", ratePlanId);
loggerFactory.info("Get with Rate plan id {}", ratePlanId);
loggerFactory.error("Get with Rate plan id {}", ratePlanId);
loggerFactory.debug("Get with Rate plan id {}", ratePlanId);

// return iRatePlanService.getRatePlan(ratePlanId);
}
}

我编写了用于验证 UUID 的自定义注解,如下所示。

import org.springframework.stereotype.Component;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.regex.Pattern;

@Target(ElementType.PARAMETER)
@Constraint(validatedBy = {UUID.IdValidator.class})
@Retention(RetentionPolicy.RUNTIME)
public @interface UUID {
String message() default "{invalid.uuid}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

@Component
public class IdValidator implements ConstraintValidator<UUID, String> {


private static final Pattern id_PATTERN =
Pattern.compile("^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$");

public boolean isValid(String value, ConstraintValidatorContext context) {

if (!(id_PATTERN.matcher(value).matches())) {
return false;
}

return true;
}

public void initialize(UUID parameters) {

}

}
}

谁能告诉我为什么它不起作用。即使我提供像“345%#7^34”这样的垃圾 ratePlanId,它也可以进入 GET 方法。

最佳答案

通过在应用程序配置文件中添加一个 bean 解决了这个问题。要在 Spring 中验证路径参数,您需要将此 bean 添加到您的配置类中。

@Bean
公共(public) MethodValidationPostProcessor methodValidationPostProcessor() {
返回新的 MethodValidationPostProcessor();
}

关于java - 自定义注释验证在 spring 中不对 @pathParam 进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40163587/

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