我的目標是如果由於請求參數爲空字符串而將其設置爲空,則操作屬性應爲null。從空字符串參數中設置操作屬性null
我創建了一個在默認堆棧之前運行的攔截器,它將invocation.getInvocationContext().getParameters()
中的所有值修剪爲null。但是,這並沒有解決我的問題。儘管參數現在爲空(在使用ParameterAware
的操作中進行了驗證),但屬性仍然被設置爲空字符串。
在進一步閱讀,我看到parameters interceptor可能的原因,特別是:
當正在調用該攔截器,一個標誌(
ReflectionContextState#CREATE_NULL_OBJECTS
)被導通,以確保任何空引用是自動創建 - 如果可能的話。有關更多信息,請參見類型轉換文檔和InstantiatingNullHandler
javadocs。
是否有一些簡單的方法來實現我的目標?
如果情況變得更糟,似乎可以擴展ParametersInterceptor
類,並覆蓋方法doIntercept(ActionInvocation invocation)
和setParameters(Object action, ValueStack stack, final Map<String, Object> parameters)
。這似乎令人難以置信地尷尬,因爲我認爲,許多人會希望的行爲。
我已經採取了你的建議,我正在圍繞HTTP工作,並且改爲在傳遞空字符串時將表單字段上的setter設置爲null。 – Matt
@Matt哦,不知何故,我甚至都沒想到 - 那太簡單了! –