Forms Spring MVC:生成表单时出现NullReferenceException

Forms Spring MVC:生成表单时出现NullReferenceException,forms,spring-mvc,nullreferenceexception,Forms,Spring Mvc,Nullreferenceexception,我很难解决这个问题。当我尝试转到/users/addurl时抛出异常,该url应显示用于创建用户条目的空表单。之后,此异常将传播到整个应用程序 以下是控制器代码: @Controller @SessionAttributes(value = "user") @RequestMapping(value = "/users") public class UserController { @Inject private UserService userService; @R

我很难解决这个问题。当我尝试转到/users/addurl时抛出异常,该url应显示用于创建用户条目的空表单。之后,此异常将传播到整个应用程序

以下是控制器代码:

@Controller
@SessionAttributes(value = "user")
@RequestMapping(value = "/users")
public class UserController {

    @Inject
    private UserService userService;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView getAllUsers() {
        List<User> users = userService.getAllUsers();

        return new ModelAndView("allUsers", "users", users);
    }

    @RequestMapping(value = "/add", method = RequestMethod.GET)
    public ModelAndView addUser(ModelMap map, @RequestParam(value = "id", required = false) Long id) throws EntityNotFoundException {
        User user = null;

        if(id != null) {
            user = userService.findById(id);

            if(user == null)
                throw new EntityNotFoundException("Can't find user!");
        }
        else {
            user = new User();
            user.setGender(Gender.MALE);
        }
        map.addAttribute("genders", generateGenders());

        return new ModelAndView("addUser", "user", user);
    }

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public ModelAndView addUser(ModelMap map, @Valid @ModelAttribute(value = "user") User user, BindingResult result,
            HttpServletResponse response, final RedirectAttributes redirectAttributes) throws IOException {
        if(!result.hasErrors()) {
            try {
                String userStatus = user.getId() != null ? "User Updated: " : "User Created: ";

                userService.saveOrUpdateUser(user);
                redirectAttributes.addFlashAttribute("userStatusMessage", userStatus + user.toString());

                return new ModelAndView(new RedirectView("/users"));
            } catch (EntityNotFoundException e) {
                response.sendError(HttpServletResponse.SC_NOT_FOUND, e.getMessage());

                return null;
            }
        }
        else {
            for (ObjectError error : result.getAllErrors()) {
                System.out.println(error.getObjectName() + ": " + error.getDefaultMessage());
            }
        }
        map.addAttribute("genders", generateGenders());

        return new ModelAndView("addUser", "user", user);
    }

    @RequestMapping(value = "/delete", method = RequestMethod.GET)
    public ModelAndView deleteUser(@RequestParam(value = "id", required = true) Long id,
            HttpServletResponse response, final RedirectAttributes redirectAttributes) throws IOException {
        try {
            User user = userService.deleteUser(id);
            redirectAttributes.addFlashAttribute("userStatusMessage", "Deleted User: " + user);
        } catch (EntityNotFoundException e) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());

            return null;
        }

        return new ModelAndView(new RedirectView("/users"));
    }

    private Map<String, String> generateGenders() {
        Map<String,String> genders = new HashMap<String,String>();

        for (Gender gender : Gender.values()) {
            genders.put(gender.toString(), gender.getDisplayName());
        }

        return genders;
    }
}

有什么建议吗?

我发现了问题所在。它位于用户类的toString()方法内部。我还是不是舒尔,因为我没有明确地称呼它。很抱歉给您带来不便

这是之前的User toString()方法:

@Override
public String toString() {
    return String.format("%d, %s %s, %s, %s, %s, %s", this.getId(), this.getFirstName(), this.getLastName(),
             new SimpleDateFormat("yyyy-MM-dd").format(this.getBirthday()), this.getGender().getDisplayName(), this.getPersonalNumber(),
             this.getEmail());
}
这是一个解决方案:

@Override
public String toString() {
    return String.format("%d, %s %s, %s, %s, %s, %s", this.getId(), this.getFirstName(), this.getLastName(),
             this.getBirthday() == null ? "" : new SimpleDateFormat("yyyy-MM-dd").format(this.getBirthday()), this.getGender().getDisplayName(), this.getPersonalNumber(),
             this.getEmail());
}

它在User.java中给出了一个空指针异常。我知道空指针在用户的某个地方,但我不知道如何修复它。问题是,我在addUser(ModelMap,@RequestParam(value=“id”,required=false)Long id中设置了用户对象。@RequestMapping(value=“/add”)--您为两个方法分配了相同的值。是吗?是的。但一个用于GET,另一个用于POST请求方法。请尝试使用记录器。找出它是否进入方法中。私有静态最终记录器=Logger.getLogger(UserController.class);logger.info(“测试”);
@Override
public String toString() {
    return String.format("%d, %s %s, %s, %s, %s, %s", this.getId(), this.getFirstName(), this.getLastName(),
             this.getBirthday() == null ? "" : new SimpleDateFormat("yyyy-MM-dd").format(this.getBirthday()), this.getGender().getDisplayName(), this.getPersonalNumber(),
             this.getEmail());
}