问题
I am doing CRUD using spring jdbc template. insert,select and delete operations are working fine but I got these following exception in update process.
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>()
here is my controller:
@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";
}
}
I have used @Autowired
annotation for the controller too.
How to resolve it? any kind of help is appreciated.
回答1:
I see that you are trying to use an Integer companyId as a ModelAttribute. I won't recommend ModelAttribute for this case (since it's overkill & easy to misuse), but in case you use, have you declare the value of that ModelAttribute before?
public String save(@ModelAttribute("company")Integer companyId,Company company,BindingResult result, ModelMap map) {
If you only specify the value like above, the system will try to initialize an Integer for all the requests. This can't be complete because class Integer doesn't have a default instructor.
Hence I recommend doing it like this:
public String save(@RequestParam("company")Integer companyId,Company company,BindingResult result, ModelMap map) {
If you still want to use a shared ModelAttribute for all your request, you must intialize it first:
@ModelAttribute("company")
public Integer companyId(){
return 0;
}
回答2:
I changed my Post method to following and it worked.
public String save(@ModelAttribute("company")Company company,BindingResult result, ModelMap map)
回答3:
@ModelAttribute("company")
public Integer companyId(){
return 0;
}
beware with this, you will have 0 in all companyId and this could be dangerous for crud.
¿can you use?
@PathVariable(value="companyId")
edit must be like save the only change is the companyId if you are saving must be 0 or null and if you are editing must be the id of the company
回答4:
Your URL cannot be repeated differently.
- you must be sure of the URL
@ModelAttribute ("company") company
来源:https://stackoverflow.com/questions/14332982/org-springframework-web-util-nestedservletexception-request-processing-failed