繁体   English   中英

如何处理自定义的HandlerMethodArgumentResolver引发的异常?

[英]How to handle exceptions thrown from customized HandlerMethodArgumentResolver?

我正在尝试自行解析参数。

public class NewHandler implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(Param.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

        // throw Exceptions here ?

        return null;
    }
}

我可以轻松地从NativeWebRequest获取输入参数,并将其分配到相应的自定义@Param批注参数中。

问题是我还想在此区域进行一些语法检查/验证。 但是,如果我在'resolveArgument'中抛出异常,则将向用户显示完整的堆栈跟踪。 那将太过分和不安全。 我只想向用户返回JSON格式的消息,以显示哪个输入参数语法有错误。

resolveArgument()的实际逻辑委托给一个单独的方法,然后从那里抛出异常。 然后可以由调用方处理。

class CustomException extends Exception {}       

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
    Object output = null;

    try {
        output = actualMethod();
    }
    catch (CustomException e) {
        // do your JSON error handling here     
    }

    return output;
}

private Object actualMethod() throws CustomException {
    if (somethingBadHappened) throw new CustomException();
    else return new Object();
}

通过将上述try / catch构造包装成一个循环,您还可以实现重复检查(即,用户有机会纠正其错误的输入)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM