如何解决Spring Boot:为什么Custom Validator类中的自动装配对象为null?
以下代码在isValid()函数内的teamResource自动连接对象上产生null:
@Component //I am not sure it is required he
public class TeamIdValidator implements ConstraintValidator<TeamIdConstraint,Integer> {
@Autowired private TeamResource teamResource;
public TeamIdValidator() {
}
@Override
public void initialize(TeamIdConstraint teamIdConstraint) {
// this.teamIdConstraint = teamIdConstraint;
}
@Override
public boolean isValid(Integer teamId,ConstraintValidatorContext cxt) {
int numOfAvailableTeams = teamResource.retrieveAllTeams().size(); //teamResource is null :(
return teamId < 0 || teamId >= numOfAvailableTeams;
}
}
TeamResource类:
@RestController
@CrossOrigin
public class TeamResource {
@Autowired private TeamRepository teamRepository;
public TeamResource() {
}
...
//mapping methods
}
如果有关系...
@Documented
@Constraint(validatedBy = TeamIdValidator.class)
@Target({ ElementType.METHOD,ElementType.FIELD,ElementType.ParaMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface TeamIdConstraint {
String message() default "Invalid team id!";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
为什么地球上的TeamResource为null?
未在其他任何地方使用新的显式初始化它。
解决方法
已经在注释中提及,但是声明了一个像这样的bean
@Configuration
public class ValidationConfig{
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor(Validator validator) {
MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
methodValidationPostProcessor.setValidator(validator);
return methodValidationPostProcessor;
}
}
删除所有@autowired,最好使用构造函数注入。 (检查互联网原因)。
然后,将RestContoller注入验证器没有任何意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。