1
我在@RestController的@GET方法中編寫了一個自定義驗證來驗證ID(這是一個路徑參數)作爲UUID,但此驗證看起來沒有工作。即使在調試過程中,控件也不會進行自定義驗證。自定義註釋驗證在@pathParam在春天沒有驗證
@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'這樣的垃圾收費標準,它也可以進入GET方法。
很重要的一提的是,如果你的「@RestController」不與「@Validated」註明,簡單地創建這種「@Bean」仍然是行不通的。 – martin