org.springframework.web.util.NestedServletException: Request processing failed

一个人想着一个人 提交于 2019-12-19 10:30:14

问题


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.

  1. you must be sure of the URL
  2. @ModelAttribute ("company") company


来源:https://stackoverflow.com/questions/14332982/org-springframework-web-util-nestedservletexception-request-processing-failed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!