【Struts 2】Error setting expression 'XXX' with value '[Ljava.lang.String;@75bd0b76'

在CentOS 7.0环境中,使用Struts 2框架时,出现如下异常

[2019-01-09 16:25:01.805][WARN][OgnlValueStack.warn] Error setting expression 'fid' with value '[Ljava.lang.String;@75bd0b76'
ognl.MethodFailedException: Method "setFid" failed for object com.cnsunet.presentation.performance.TcpServiceAction@2ac34074 [java.lang.NoSuchMethodException: setFid([Ljava.lang.String;)]
	at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:823)
	at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:964)
	at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:75)
	at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:131)
	at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:28)
	at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1656)
	at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java:65)
	at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1656)
	at ognl.ASTProperty.setValueBody(ASTProperty.java:101)
	at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
	at ognl.SimpleNode.setValue(SimpleNode.java:246)
	at ognl.Ognl.setValue(Ognl.java:476)
	at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:198)
	at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:161)
	at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:149)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:276)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)

但整个模块的功能并没有受到影响,一切正常运行。

然后,我在本地进行代码调试,发现也是正常的,连该异常error信息都没有复现。

最后到网上搜索资料,终于定位到问题所在,并解决!

出现该errror一般是在client请求server时,传的参数有问题而产生的

有两种情况:

  1. action类中,没有某个参数的get/set方法。
  2. action类中,有某个参数的get/set的方法,但是在set方法中,形参的类型与client传过来的类型不一致。

第一种大家都清楚,这里说下第二种:

    public void setFid(long fid) {
		this.fid = fid;
    }

比如以上代码,形参fid为long型,如果client传的参数为String型,就会出现异常error。

因此,对于client传参的类型一定要与server的一致,避免隐晦的错误!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值