我试图自己解决参数。
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格式的消息,以显示哪个输入参数语法有错误。
答案 0 :(得分:1)
将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构造,您还可以实现重复检查(即用户有机会纠正他/她的错误输入)。