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

如何通过Controller修改resources.groovy中Bean的属性值?

解决Controller中修改Spring Bean属性的问题

首先,你遇到的问题核心在于putAt方法并不适用于普通的POJO Bean——这个方法是Map类的专属方法,除非你的Property类实现了Map接口或者重写了putAt,否则调用它根本不会对Bean的属性产生任何影响。

正确的修改方式应该直接利用Groovy的属性访问特性(或者调用对应的setter方法),具体操作如下:

1. 直接赋值修改属性

如果你的Property是Groovy类(会自动生成getter/setter方法),或者是Java类但已经定义了setCompanyName方法,直接在Controller里这样写就能生效:

def beanReturned = Holders.applicationContext.getBean("property")
// Groovy会自动调用对应的setter方法,直接赋值即可
beanReturned.companyName = params.companyName

2. 注意Bean的作用域影响

需要留意你的property Bean的作用域:

  • 默认是singleton作用域:修改后这个Bean的属性会全局生效,所有后续获取该Bean的地方都会看到更新后的companyName。
  • 如果是prototype作用域:每次调用getBean都会生成新的实例,你修改的只是当前Controller请求中拿到的这个实例,其他请求或地方获取的Bean还是原来的初始值。

为什么之前的代码无效?

putAt("companyName", params.companyName)这种写法只对Map结构生效,比如:

def map = [companyName: "Old Company"]
map.putAt("companyName", "New Company") // 这会正常修改值

但你的Property是一个普通的Bean对象,并非Map,所以这个方法调用不会触发属性的修改逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:18:23