当前位置: 首页 > 知识库问答 >
问题:

Spring Boot:为什么自定义验证器类中的自动连线对象为空?

谢鸿飞
2023-03-14

以下代码在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;
    }
}

团队资源类:

@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 {};
}

到底为什么teamResources是null?

它没有在任何其他地方用new显式初始化。

共有1个答案

江飞章
2023-03-14

已经在评论中提到了,但是声明一个像这样的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、prefere构造函数注入。(上网查看原因)。

然后,向验证器注入RestContoller是没有意义的。

 类似资料:
  • 问题内容: 我有一个基于Spring的webapp。我在控制器中使用了几个带有注解@ Repository,@ Transactional的存储库类。那部分工作正常。 我创建了一个自定义约束验证器,它必须访问存储库。现在,我不明白为什么存储库为空。我尝试使用@Component注释对验证器进行注释。包含所有这些类的基本程序包位于xml的一部分中。因此,我还应该采取其他措施来确保存储库依赖项注入正常

  • 我试图在MessageBoxDAO类中自动连接jdbctemplate(我想它工作得很好),然后我在控制器中创建自动连接的DAO对象来获取最新的ID,以防止获取重复的ID,并从它结束的地方开始。 代码如下: 由于我未知的原因,“dao”为空,因此无法构造计数器,程序停止 我刚接触spring boot,我知道这可能是一个非常简单的问题,但有人能指出我错在哪里吗?

  • 主要内容:自定义验证器类实例我们可以在JSF中创建自己的自定义验证器。以下列表是在JSF中创建自定义验证器的步骤。 通过实现接口创建一个验证器类。 实现上面接口的方法。 使用注释为自定义验证器分配唯一的ID。 自定义验证器类实例 打开 NetBeans IDE 创建一个Web工程:CustomValidator,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文件:result

  • 问题内容: 我有一个基于Spring的webapp。我在控制器中使用了几个带有注解@ Repository,@ Transactional的存储库类。那部分工作正常。 我创建了一个自定义约束验证器,它必须访问存储库。现在,我不明白为什么存储库为空。我尝试使用@Component注释对验证器进行注释。包含所有这些类的基本程序包位于xml的一部分中。因此,我还应该采取其他措施来确保存储库依赖项注入正常

  • 我正在尝试使用自定义身份验证提供程序配置Spring Security性。但是,我想在服务中自动装配以处理实际的数据库身份验证。我已经验证它在没有这个自动装配bean的情况下工作(只是在提供程序中硬编码)。我也在使用SpringMVC与hibernate结合使用。我目前正在使用根配置(hibernate等)和webMVC使用java注释和Spring使用xml进行混合方法。我知道这是不赞成的,但我

  • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe