Spring Boot\Hibernate:自定义字段验证失败



我正试图在我的Spring Boot项目中创建一个字段自定义验证器。我依赖下面的例子https://www.baeldung.com/spring-mvc-custom-validator和更多的来源,但也许我做错了什么,因为我没有在输出中看到预期的错误(这是我作为验证产品所期望的吗?(

代码如下:

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.10.Final</version>
</dependency>
@Configuration
public class SpringConfiguration {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
}
@RestController
@CrossOrigin
@Validated
public class WebController {
private final Logger logger = LoggerFactory.getLogger(WebController.class);
@Autowired private WebService webService;
@TeamIdConstraint
private Integer homeId;

@TeamIdConstraint
private Integer awayId;
@GetMapping("/matchresultbyids")
public MatchStats matchResult(@RequestParam Integer homeId, @RequestParam Integer awayId)
throws MissingTeamException, InvalidTeamIdExcpetion {
this.homeId = homeId;
this.awayId = awayId;
return webService.matchResult(this.homeId, this.awayId);
}
}
@Documented
@Constraint(validatedBy = TeamIdValidator.class)
@Target({ ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface TeamIdConstraint {

String message() default "Invalid team id!";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class TeamIdValidator implements ConstraintValidator<TeamIdConstraint, Integer> {
@Autowired
TeamResource teamResource;
@Override
public void initialize(TeamIdConstraint teamId) {
}
@Override
public boolean isValid(Integer teamId, ConstraintValidatorContext cxt) {
int numOfAvailableTeams = teamResource.retrieveAllTeams().size();
return teamId < 0 || teamId >= numOfAvailableTeams;
}
}

此外,我不喜欢必须创建专门用于应用约束注释的字段。有更好的方法吗?也许这就是错误的来源??谢谢

好吧,我还必须设置ElementType.PARAMETER,这样我就可以直接在参数上使用注释并删除多余的字段。

最新更新