【问题标题】:How to return custom response on failing validation in Struts 2如何在 Struts 2 中验证失败时返回自定义响应
【发布时间】:2013-12-18 11:17:32
【问题描述】:

让我先解释一下我在做什么:

我正在编写一个 API,它在成功或失败时返回 JSON,并且在返回的 JSON 中有一个 status 变量,它让最终用户知道它在哪里是 successfailure

现在,如果 API 需要提交一些参数,那么如果该参数是双精度且提交的值是字符串,那么我必须返回带有 status false 的 JSON,并在 errorlist 中返回错误消息。

默认情况下,介于两者之间的拦截器,未能将String 设置为某些Number 会返回Action.INPUT 结果而不执行操作方法。

我尝试使用@SkipValidation 注释该方法,但方法代码仍然没有执行,它直接从拦截器返回INPUT(我猜)。

默认情况下,我将状态定义为true,然后在操作方法中,根据条件,如果需要,我将其设置为 false,但由于现在该操作从未执行,因此返回的 JSON 响应具有status 为 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"/>

【问题讨论】:

  • 至少发布一些代码。
  • @RomanC 添加了正在使用的动作和拦截器堆栈。

标签: java json configuration struts2 struts-validation


【解决方案1】:

如果操作未执行意味着您有验证错误。在这种情况下,当 validate 方法完成(如果有)时,validation interceptor 返回 Action.INPUT 结果。

因此,您希望在这种情况下返回 JSON。要返回 JSON,您应该创建一个名称为 "input" 的结果并输入 "json" 并将其添加到操作配置中。

验证完成后,您可以使用validate()方法自定义结果,输入结果将被执行,如果是JSON类型,则返回JSON响应。

【讨论】:

  • 我已经添加了SkipValidation 注释,因此应该执行该操作。其次,您的意思是说validate() 是不惜一切代价执行的,对吗?那么,我可以在validate() 中填写json 字段吗?
  • "validate() 不惜一切代价执行",如果没有其他拦截器(标准的或您的)在验证拦截器之前抛出异常(或返回结果)。
  • @RomanC 是的,是在回答它的评论,而不是你的回答……需要澄清“不惜一切代价执行”这句话
猜你喜欢
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 2022-01-22
  • 2023-03-19
  • 2020-02-17
  • 2018-02-18
  • 2018-10-04
  • 2020-06-29
相关资源
最近更新 更多