自动装配java.lang.NullPointerException

我收到这个错误

错误

org.springframework.web.util.NestedServletException: 
Request processing failed; nested exception is java.lang.NullPointerException
...
root cause
java.lang.NullPointerException
    com.javalabs.web.service.UserService.get(UserService.java:22)

我已经用config和component-scan包配置了bean

UserService.java

@Service("userService")
public class UserService {

    private UserDao userDao;

    @Autowired
    private void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public User get(String username){
        return userDao.get(username);  //Error in this line userDao = null
    }
...

TaskController.java

@Controller
public class TaskController {

    ...
    private UserService userService;
        ...

    @Autowired
    public void setCategoryService(CategoryService categoryService) {
        this.categoryService = categoryService;
    }
...
    @RequestMapping(value = "/docreatetask", method = RequestMethod.POST)
    public String doCreateTask(Model model, @Valid Task task,
            BindingResult result, Principal principal,
            @RequestParam(value = "delete", required = false) String delete) {
        System.out.println(">TaskController doCreateTask " + task + " | delete: "+ delete);

        if (result.hasErrors()) {
            System.out.println("/docreatetask in here");
            model.addAttribute("task", task);
            return "createtask";
        }

        if(delete == null){
            String username = principal.getName();
            task.setIdUser(new UserService().get(username).getIdUser());
            task.setDate(new Date());
            taskService.create(task);
            System.out.println(">TaskController: Form does validate");
            return "taskcreated";   
        }
        else {
            return "taskdeleted";           
        }
    }
...

有任何想法吗?

路易吉·门多萨(Luiggi Mendoza)

这是问题所在:

task.setIdUser(new UserService().get(username).getIdUser());

您正在手动创建bean。您应该让Spring创建并使用它。

只需UserService在您的TaskController班级中自动连线

@Controller
public class TaskController {
    @Autowired
    UserService userService;

    //...
    @RequestMapping(value = "/docreatetask", method = RequestMethod.POST)
    public String doCreateTask(Model model, @Valid Task task,
            BindingResult result, Principal principal,
            @RequestParam(value = "delete", required = false) String delete) {
        //current code...
        task.setIdUser(userService.get(username).getIdUser());
        //rest of your code...
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章