使用Spring在JSON中呈现异常

2023/05/11

1. 概述

Happy-path REST很好理解,而Spring使这在Java中变得容易。

在本教程中,我们将使用Spring将Java异常作为JSON响应的一部分进行传递

如需更广泛的了解,请查看我们关于使用Spring进行REST错误处理创建Java全局异常处理程序的文章。

2. 带注解的解决方案

我们将使用三个基本的Spring MVC注解来解决这个问题:

  • @RestControllerAdvice其中包含@ControllerAdvice将周围的类注册为每个@Controller应该知道的东西,@ResponseBody告诉Spring将该方法的响应呈现为JSON

  • @ExceptionHandler告诉Spring应该为给定的异常调用我们的哪些方法

它们一起创建了一个Spring bean,用于处理我们为其配置的任何异常。下面是有关结合使用@ControllerAdvice和@ExceptionHandler的更多详细信息。

3. 例子

首先,让我们创建一个任意的自定义异常返回给客户端:

public class CustomException extends RuntimeException {
    // constructors
}

其次,让我们定义一个类来处理异常并将其作为JSON传递给客户端:

@RestControllerAdvice
public class ErrorHandler {

    @ExceptionHandler(CustomException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public CustomException handleCustomException(CustomException ce) {
        return ce;
    }
}

请注意,我们添加了@ResponseStatus注解。这将指定要发送给客户端的状态码,在我们的例子中是内部服务器错误500。此外,@ResponseBody确保将对象以JSON的方式发送回客户端。最后,下面是一个虚拟控制器,在这里只是简单的抛出我们的自定义异常:

@Controller
public class MainController {

    @GetMapping("/")
    public void index() throws CustomException {
        throw new CustomException();
    }
}

4. 总结

在这篇文章中,我们演示了如何在Spring中处理异常。此外,我们展示了如何将它们以JSON的方式发送回客户端。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章