[英]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.