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

查询参数触发org.springframework.beans.NotWritablePropertyException求助

解决org.springframework.beans.NotWritablePropertyException异常的常见思路

我之前也踩过这个坑!这个异常说白了就是Spring没法找到请求参数对应的可写属性,大概率是你的Controller或者绑定的Bean出了问题,下面是我总结的几个排查方向:

  • 检查目标类的Setter方法是否存在
    Spring是严格遵循JavaBean规范来做属性绑定的,比如你的请求参数是param1,对应的Bean(或者Controller方法绑定的模型类)里必须有public void setParam1(String param1)这样的Setter方法。注意大小写要对应——如果属性名是param1,Setter的方法名必须是setParam1(首字母大写),不能写错成setparam1或者setParam。

  • 确认参数名与属性名完全匹配
    看看URL里的参数名param1、param2,和你要绑定的类里的属性名是不是完全一致?比如有没有把类里的属性写成paramOne或者pParam1,导致Spring找不到对应的属性?

  • 正确使用@RequestParam注解
    如果你的Controller方法是直接接收参数,而不是绑定到某个Bean,一定要加上@RequestParam注解。比如:

    @RequestMapping("/xx/xx.do")
    public String handleRequest(@RequestParam("param1") String param1, 
                               @RequestParam("param2") String param2) {
        // 业务逻辑
        return "yourView";
    }
    

    要是没加这个注解,Spring会默认尝试把参数绑定到模型属性,这时候就需要对应的模型类有Setter方法,反而容易出问题。

  • 排查FormBean的绑定问题
    如果你是把参数绑定到自定义的FormBean,要确保:

    1. FormBean里有param1和param2的私有属性,并且配套了正确的Setter方法;
    2. Controller方法里用@ModelAttribute注解声明了这个FormBean,比如:
      @RequestMapping("/xx/xx.do")
      public String handleRequest(@ModelAttribute YourFormBean formBean) {
          String param1 = formBean.getParam1();
          // 处理逻辑
          return "yourView";
      }
      
  • 检查参数类型兼容性
    虽然这个异常主要是属性不可写,但如果参数类型不匹配(比如你传的是字符串,但属性是Integer类型),有时候也会间接触发类似问题。确保请求参数的类型和Bean属性的类型兼容,比如字符串对应String,数字对应Integer/Long等。

先从这几个方向排查,尤其是Setter方法和参数名匹配这两点,大部分情况下都能解决问题!

内容的提问来源于stack exchange,提问作者Prasad Bolla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:14:16