当前位置: 首页 > 知识库问答 >
问题:

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

濮阳靖
2023-03-14

我正试图自己解决参数问题。

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格式的消息,以显示哪个输入参数语法有错误。

共有1个答案

穆建元
2023-03-14

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构造,您还可以实现重复检查(即用户有机会纠正他/她的错误输入)。

 类似资料:
  • 我是Spring Security的新手。 我有一段代码,我检查是否在请求中传递了授权头,如果缺少,我抛出一个异常。 我的目标是在全球范围内处理所有异常,因此我使用@ControllerAdvice。 注意:我知道@ControllerAdvice对于从这个和这个抛出的控制器之外的异常不起作用,所以我也遵循了这些链接中的建议。 重新验证入口点。Java语言 这是我配置authenticationE

  • 我有一个验证令牌的自定义筛选器tokenLoginFilter 我的Spring安全 令牌登录过滤器 在authenticationmanager . authenticate调用中,我从TokenAuthenticationProvider中抛出了BadCredentialsException 令牌身份验证提供程序 Tomcat将此BadCredentialsException解释为错误代码50

  • 我在我的Android应用程序中使用了一个自定义的和改型客户端,它在某些特定情况下会引发异常。我正试着用Kotlin Coroutines来让它工作。

  • 我用Spring5反应式编写了一个自定义异常 我把这个叫做服务: 但是当我到达这个页面时,会抛出一个异常,但它不是404,而是一个空指针异常和一个错误500页面,但有正确的消息? AddressNotFound永远不会抛出,只有Nullpointer异常,但会抛出我的自定义消息???你能帮帮我吗? 这是我的控制器: 谢谢

  • 我是Spring Boot的新手,但在阅读了Spring Boot REST中关于异常handlig的帖子和博客几个小时之后,我决定在这里写一些关于如何处理自定义转换器抛出的异常的文章。 我开发了一个基于Spring Boot的小型REST应用程序,简单地从IntelliJ生成。示例性方法如下所示 使用、和的所有类型的处理异常,我无法捕获控制器中转换器的异常,从而将json错误响应原始字段的“st

  • 我使用的是Nifi 0.4.1版本。我写自定义代码转换CSV到avro格式。我已经创建了类文件,并能够生成nar文件。将nar文件放置在lib目录中,并重新启动nifi服务器。 任何帮助都很感激.. 谢谢,