我的目标是,如果由于请求参数为空字符串而设置了动作属性,则它们为空。
我创建了一个在默认堆栈之前运行的拦截器,它将所有值修剪invocation.getInvocationContext().getParameters()
为空。但是,这并没有解决我的问题;尽管参数现在为 null(在操作中使用 验证ParameterAware
),但属性仍设置为空字符串。
进一步阅读后,我发现参数拦截器可能是原因,特别是:
在调用此拦截器时,
ReflectionContextState#CREATE_NULL_OBJECTS
会打开一个标志 ( ) 以确保自动创建任何空引用 - 如果可能的话。有关更多信息,请参阅类型转换文档和InstantiatingNullHandler
javadocs。
有没有一些简单的方法可以实现我的目标?
如果情况变得更糟,似乎可以扩展ParametersInterceptor
类,并覆盖方法doIntercept(ActionInvocation invocation)
和setParameters(Object action, ValueStack stack, final Map<String, Object> parameters)
. 这似乎令人难以置信的尴尬,我认为,这将是许多人想要的行为。