2017-04-01 51 views
-1

我一直試圖讓我的頭在幾個小時內成功解決這個錯誤。UnsatisfiedDependencyException:創建名爲'welcomeController'的bean時出錯:通過字段'userValidator'表示的不滿意的依賴關係

即時得到下面的錯誤 -

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有自動連接到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配置和WebSecurityConfig都在包中com.config

任何想法?

+1

您的'UserValidator'似乎沒有用'@ Component'或類似的方式進行註釋。 – chrylis

+0

是的,工作,謝謝! – HazardAGuess

回答

0

您需要使用@Component刻板印象註釋爲您UserValidator類,否則,Spring容器不會實例化類&因此將不能夠注入它裏面WelcomeController依賴。

@Component 
public class UserValidator implements Validator{ 
//add current code 
} 
相關問題