【问题标题】:UnsatisfiedDependencyException: Error creating bean with name 'welcomeController': Unsatisfied dependency expressed through field 'userValidator'UnsatisfiedDependencyException:创建名称为“welcomeController”的 bean 时出错:通过字段“userValidator”表示的依赖项不满足
【发布时间】:2017-04-01 22:25:52
【问题描述】:

几个小时以来,我一直在努力解决这个错误,但收效甚微。

我收到以下错误 -

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'welcomeController': Unsatisfied dependency expressed through field 'userValidator'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.config.UserValidator' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我的 WelcomeController 有一个 AutoWired 到 UserValidator -

@Controller
@RequestMapping("/")
public class WelcomeController {

    @Autowired
    AuctionItemRepository aucRepository;

    @Autowired
    UserRepository userRepository;

    @Autowired
    UserRoleRepository roleRepository;

    @Autowired
    UserValidator userValidator;

    @Autowired
    UserService userService;

    @Autowired
    SecurityService securityService;

// inject via application.properties
@Value("${welcome.message:test}")
private String message = "Hello World";

@RequestMapping(value = "/")
public String welcome(Map<String, Object> model) {
    model.put("message", this.message);
    return "welcome";
}


    Date getTime() {
        Timestamp time = new Timestamp(new Date().getTime());
        return time;
    }


    @RequestMapping(value = "/sell", method = RequestMethod.GET)
    public String addAuction(Model model, HttpServletRequest request) {


        model.addAttribute("newAuction", new AuctionItem());
        model.addAttribute("action", "sell");
        return "NewAuction";
    }


    @RequestMapping(value = "/sell", method = RequestMethod.POST)
    public String saveAuction(@ModelAttribute("AuctionItem")AuctionItem auction, BindingResult result, ModelMap model){
        if(result.hasErrors()){
            return "error";
        }
 //           User user = (User) userRepository.findByUsername(getUser());
        auction.setAucStartTime(getTime());

        aucRepository.save(auction);
//            AuctionItem ai = aucRepository.findByOwnerAndStartTime(user, auction.getaStart());
        return "redirect:/aucConfirm";
    }


    @RequestMapping(value = "/aucConfirm", method = RequestMethod.GET)
    public String confirmAuction(Model model, HttpServletRequest request) {


        return "aucConfirm";
    }





    @RequestMapping(value = "/register", method = RequestMethod.GET)
    public String register(Model model) {
        model.addAttribute("userForm", new User());
        return "register";
    }   


    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public String register(@ModelAttribute("userForm") User userForm, BindingResult bindingResult, Model model) {
        userValidator.validate(userForm, bindingResult);

        if (bindingResult.hasErrors()) {
            return "register";
        }

        userService.save(userForm);

        securityService.autologin(userForm.getUsername(), userForm.getPasswordConfirm());

        return "redirect:/";
    }

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login(Model model, String error, String logout) {
        if (error != null)
            model.addAttribute("error", "Your username and password is invalid.");

        if (logout != null)
            model.addAttribute("message", "You have been logged out successfully.");

        return "login";
    }   

}

UserValidator 类 -

public class UserValidator implements Validator{
@Autowired
private UserService userService;

@Override
public boolean supports(Class<?> aClass) {
    return User.class.equals(aClass);
}

@Override
public void validate(Object o, Errors errors) {
            User user = (User) o;

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "NotEmpty");
    if (user.getUsername().length() < 6 || user.getUsername().length() > 32) {
        errors.rejectValue("username", "Size.userForm.username");
    }
    if (userService.findByUsername(user.getUsername()) != null) {
        errors.rejectValue("username", "Duplicate.userForm.username");
    }

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "NotEmpty");
    if (user.getPass().length() < 8 || user.getPass().length() > 32) {
        errors.rejectValue("password", "Size.userForm.password");
    }

    if (!user.getPasswordConfirm().equals(user.getPass())) {
        errors.rejectValue("passwordConfirm", "Diff.userForm.passwordConfirm");
    }
}

}

这两个类以及我的 Spring Boot Configuration 和 WebSecurityConfig 都在包 com.config 中

有什么想法吗?

【问题讨论】:

  • 您的UserValidator 似乎没有使用@Component 或类似的注释。
  • 是的,成功了,谢谢!

标签: java spring spring-boot spring-security


【解决方案1】:

您需要为您的UserValidator 类使用@Component 构造型注释,否则,Spring 容器将不会实例化该类,因此将无法将其作为依赖项注入WelcomeController

@Component
public class UserValidator implements Validator{
 //add current code
}

【讨论】:

    猜你喜欢
    • 2020-05-03
    • 2020-04-04
    • 1970-01-01
    • 2020-07-26
    • 2017-05-24
    • 2018-01-10
    • 2021-08-14
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多