2013-12-18 56 views
1

讓我解釋一下我在做什麼第一:如何在Struts2的驗證失敗返回自定義響應

我正在寫一個API,它返回JSON成功或失敗,並有返回的JSON內status變量,它可以讓最終用戶知道它是success還是failure

現在,如果一個API預計提交一些參數,那麼,如果該參數是雙&提交的值是一個字符串,那麼我必須與status假,在errorlist返回錯誤消息,JSON。

默認情況下,中間的攔截器無法將String設置爲Number返回Action.INPUT而不執行操作方法。

我試着用@SkipValidation註釋該方法,但方法代碼仍然不執行,它直接從攔截器(我猜)返回INPUT。

我已經在默認情況下將狀態定義爲true然後在action方法中,根據條件,如果需要,我將它設置爲false,但是由於此時操作從未執行,返回的JSON響應具有狀態爲true並且errorlist爲空(因爲操作未執行,用於向列表中添加錯誤)。

請幫忙。

操作代碼:

@SkipValidation 
    public String saveFund() { 
      //some code which is never executed when Double variable is a string 
    return SUCCESS; 
} 

攔截器堆棧使用:

<interceptors> 
    <interceptor name="nlogin" class="interceptors.AdminInterceptor"/> 
    <interceptor-stack name="loginStack"> 
     <interceptor-ref name="nlogin"/> 
     <!--<interceptor-ref name="store">--> 
     <!--<param name="operationMode">AUTOMATIC</param>--> 
     <!--</interceptor-ref>--> 
     <interceptor-ref name="defaultStack"/> 
    </interceptor-stack> 
</interceptors> 
<default-interceptor-ref name="loginStack"/> 
+0

至少發佈一些代碼。 –

+0

@RomanC添加了正在使用的動作和攔截器堆棧。 –

回答

1

如果不執行行動意味着你必須驗證錯誤。當驗證方法完成時(如果有的話),驗證攔截器返回Action.INPUT結果。所以,在這種情況下你想要返回一個JSON。要返回JSON,您應該創建一個名稱爲"input"的結果,並鍵入"json"並將其添加到操作配置中。驗證完成後,您可以使用validate()方法自定義結果,輸入結果將被執行,如果是JSON類型,則會返回JSON響應。

+0

我已經添加了'SkipValidation'註釋,因此,該操作應該執行。其次,你的意思是說'validate()'是不惜一切代價執行的,對嗎?那麼,我可以在'validate()'中填充json字段? –

+0

如果沒有其他攔截器(標準或你的)在驗證攔截器之前拋出一個異常(或返回一個結果),那麼「validate()'是全部執行的」。 –

+0

@RomanC yep正在回答它的評論,而不是你的回答......句子「以全部成本執行」需要澄清 –

相關問題