org.springframework.web.util.NestedServletException:请求处理失败

时间:2013-01-15 07:31:37

标签: spring-mvc jdbctemplate spring-annotations

我正在使用spring jdbc模板进行CRUD。 插入,选择和删除操作工作正常但我在更新过程中遇到以下异常。

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.lang.Integer]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.lang.Integer.<init>()

这是我的控制器:

@RequestMapping(value="/editCompany/{companyId}", method= RequestMethod.GET)
    public String edit(@PathVariable(value="companyId")Integer companyId,ModelMap map) {

        Company company=companyService.get(companyId);
        map.addAttribute("company", company);
        map.put("companyId", companyId);
        return "editCompany"; 
    }

    @RequestMapping(value="/editCompany/{companyId}", method= RequestMethod.POST)
        public String save(@ModelAttribute("company")Integer companyId,Company company,BindingResult result, ModelMap map) {

        companyValidator.validate(company, result);
        if (result.hasErrors()) {
            return "editCompany";
        } else {
            Integer i=companyService.save(company);

            return "status";
        }
    }

我也为控制器使用了@Autowired注释。 怎么解决?任何形式的帮助表示赞赏。

4 个答案:

答案 0 :(得分:2)

我看到您正在尝试将Integer companyId用作ModelAttribute。我不会为这种情况推荐ModelAttribute(因为它太过分而且容易被滥用),但是如果你使用,你是否要在之前声明该ModelAttribute的值?

public String save(@ModelAttribute("company")Integer companyId,Company company,BindingResult result, ModelMap map) {

如果您只指定上述值,系统将尝试初始化所有请求的整数。这可能无法完成,因为类Integer没有默认教师。

因此我建议这样做:

public String save(@RequestParam("company")Integer companyId,Company company,BindingResult result, ModelMap map) {

如果您仍想为所有请求使用共享的ModelAttribute,则必须首先初始化它:

@ModelAttribute("company")
public Integer companyId(){
    return 0;
}

答案 1 :(得分:1)

我将Post方法更改为以下方式,并且有效。

public String save(@ModelAttribute("company")Company company,BindingResult result, ModelMap map)

答案 2 :(得分:0)

@ModelAttribute("company")
public Integer companyId(){
return 0;
}

要注意这一点,你将在所有companyId中获得0,这对于crud来说可能是危险的。

¿你能用吗?

@PathVariable(value="companyId")

编辑必须像保存唯一的更改是companyId,如果您保存必须为0或null,如果您正在编辑必须是公司的ID

答案 3 :(得分:-3)

您的网址不能以不同方式重复。

  1. 您必须确定网址
  2. @ModelAttribute ("company") company