【发布时间】:2020-11-04 16:44:34
【问题描述】:
我正在尝试在我的 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;
}
}
另外,我不喜欢我必须创建专门用于应用约束注释的字段的事实。 有没有更好的办法?也许这是错误的根源? 谢谢!
【问题讨论】:
标签: spring spring-boot hibernate spring-mvc