You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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无法正确注入该对象:

具体问题点

  1. Model参数被错误注解修饰:
    Model是Spring MVC提供的用于传递数据到视图的接口,Spring会自动为控制器方法注入其实现类实例,不需要添加@RequestBody或@ModelAttribute注解。当你给Model加上这两个注解后,Spring会尝试实例化这个接口,但接口本身没有可直接调用的构造函数,因此抛出找不到唯一构造函数的异常。
  2. 注解混用冲突:
    @RequestBody用于解析JSON格式的请求体,@ModelAttribute用于绑定表单参数到实体类,两者作用场景不同,不能同时用于同一个参数,这里的混用进一步干扰了Spring的参数解析逻辑。
  3. 目标对象注解位置错误:
    如果你想将请求参数绑定到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:57:27