2013-12-18 64 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正在回答它的评论,而不是你的回答......句子“以全部成本执行”需要澄清 –

相关问题