3

假设Double动作中有一个变量,如果请求正文中发送的值类似于

{"dblField":""}

interceptorStack看起来像:

<action name="save" class="actions.MyAction" method="save">
    <interceptor-ref name="jsonValidationWorkflowStack">
    </interceptor-ref>
    <!--<interceptor-ref name="loginStack"/>-->
   <!-- I've tried using each of the above two separately, but both failed -->
    <interceptor-ref name="json">
        <param name="enableSMD">true</param>
    </interceptor-ref>
    
    <result type="json" name="*">
        <param name="excludeProperties">
            idIo
        </param>
    </result>
</action>

然后动作抛出一个NumberFormatException,根据插件源代码这里没问题。

但是这个异常并没有在插件中处理,因此,从抛出异常的动作中返回,这会导致global-exception-handler.

如果使用查询字符串发送相同的请求,?dblField=则操作返回INPUT

那么,我怎样才能使 json-plugin 以相同的方式返回INPUT并设置适当fieldErrors的而不是抛出NumberFormatException和触发globalExceptionHandler

4

1 回答 1

2

您可以通过扩展拦截器和覆盖方法来将exception拦截器放在您自己的拦截器之前而不是json拦截器之前,您可以在其中捕获错误。然后,您可以添加操作错误或重新引发自定义异常,您可以在操作配置中或全局映射该异常。jsonintercept

<exception-mapping exception="org.exceptionmapping.CustomException"
                             result="errorresult"/>

这样,您可以将所有仅 json 的拦截器错误与您的自定义异常进行映射。

于 2014-01-06T15:49:53.857 回答