Spring项目报错:No primary or single unique constructor found for Model接口
错误排查:No primary or single unique constructor found for interface org.springframework.ui.Model
问题根源
这个错误的直接原因是你在控制器方法的Model参数上错误使用注解,导致Spring无法正确注入该对象:
具体问题点
Model参数被错误注解修饰:Model是Spring MVC提供的用于传递数据到视图的接口,Spring会自动为控制器方法注入其实现类实例,不需要添加@RequestBody或@ModelAttribute注解。当你给Model加上这两个注解后,Spring会尝试实例化这个接口,但接口本身没有可直接调用的构造函数,因此抛出找不到唯一构造函数的异常。- 注解混用冲突:
@RequestBody用于解析JSON格式的请求体,@ModelAttribute用于绑定表单参数到实体类,两者作用场景不同,不能同时用于同一个参数,这里的混用进一步干扰了Spring的参数解析逻辑。 - 目标对象注解位置错误:
如果你想将请求参数绑定到Cashier对象,应该给Cashier c添加@ModelAttribute(或省略,Spring默认支持),而不是错误地加到Model上。
修复方案
根据你的请求场景,选择以下两种修正方式之一:
场景1:表单提交(常规页面表单)
移除Model上的错误注解,将Cashier作为参数让Spring自动绑定:
@PostMapping("/saveCashier") public String save(Cashier c, Model m) { List<Cashier> cashiers = cservice.getAllCashier(); m.addAttribute("cashier", c); cservice.save(c); return "redirect:/cashierList"; }
场景2:JSON请求体(前后端分离场景)
如果是接收JSON格式的请求,给Cashier添加@RequestBody注解,Model保持无注解:
@PostMapping("/saveCashier") public String save(@RequestBody Cashier c, Model m) { List<Cashier> cashiers = cservice.getAllCashier(); m.addAttribute("cashier", c); cservice.save(c); return "redirect:/cashierList"; }
内容的提问来源于stack exchange,提问作者əbi
相关产品推荐
相关产品推荐

