我正在使用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
注释。
怎么解决?任何形式的帮助表示赞赏。
答案 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)
您的网址不能以不同方式重复。
@ModelAttribute ("company") company