Java 如何使用Struts2 JSON插件验证发送的JSON而不引发异常

Java 如何使用Struts2 JSON插件验证发送的JSON而不引发异常,java,json,struts2,query-string,struts2-json-plugin,Java,Json,Struts2,Query String,Struts2 Json Plugin,假设在一个操作中有一个Double变量,如果请求体中发送的值类似 {"dblField":""} 而截取器堆栈看起来像: 但是这个异常没有在插件中处理,因此,从引发异常的操作返回,这将导致触发全局异常处理程序 如果使用查询字符串发送相同的请求,?dblField=,则操作返回输入 所以,如何使json插件以相同的方式返回INPUT并设置适当的fieldErrors,而不是抛出NumberFormatException并触发globalException

假设在一个操作中有一个
Double
变量,如果请求体中发送的值类似

{"dblField":""}
而截取器堆栈看起来像:

但是这个异常没有在插件中处理,因此,从引发异常的操作返回,这将导致触发
全局异常处理程序

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

所以,如何使json插件以相同的方式返回
INPUT
并设置适当的
fieldErrors
,而不是抛出
NumberFormatException
并触发
globalExceptionHandler

您可以通过扩展
json
拦截器和覆盖可以捕获错误的
截取
方法。然后,您可以添加操作错误或重新显示自定义异常,您可以在操作配置或全局映射该异常

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


通过这种方式,您可以将所有仅json侦听器错误映射到自定义异常。

这是不同的。Validate()不是调用jsonToObject转换器的,这是由JSON拦截器完成的,它抛出NumberFormatException,因为是空的双值。如果我必须在JSON拦截器之前编写一个验证拦截器,那么JSON拦截器或者JSON验证拦截器应该会添加错误,而不是引发然后由globalExceptionHandler处理的异常。我还致力于创建一个SSCCE,这将有助于更好地理解这种情况。我无法检查错误,因为JSON拦截器抛出一个NFE,并且操作代码从未执行过。即使double被传递一个字符串,它也不应该抛出异常,而是返回输入,将错误添加到fieldErrors中。还有其他方法检查错误吗?最后,我编写了自己的JSONInterceptor,但这并不好,因为它无法记录/添加fieldErrors。现在就可以了,我把它作为一个bug归档,让我们看看那些家伙在想什么。最后,我完成了JSON验证框架,它可以通过扩展点或过滤器或拦截器集成到应用程序中。