【问题标题】:Spring Boot \ Hibernate: Custom Field Validation FailsSpring Boot \ Hibernate:自定义字段验证失败
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2023-02-11
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2019-11-11
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      相关资源
      最近更新 更多