Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring | 如何在项目中优雅的处理异常 - 全局异常处理以及自定义异常处理

Spring | 如何在项目中优雅的处理异常 - 全局异常处理以及自定义异常处理

原创
作者头像
kfaino
修改于 2023-09-26 05:50:11
修改于 2023-09-26 05:50:11
4K0
举报
文章被收录于专栏:程序员的日常程序员的日常

引言

在快速迭代和持续交付的今天,软件的健壮性、可靠性和用户体验已经成为区别成功与否的关键因素。特别是在Spring框架中,由于其广泛的应用和丰富的功能,如何优雅地处理异常就显得尤为重要。本文旨在探讨在Spring中如何更加高效、准确和优雅地处理异常,帮助开发者更好地构建和维护Spring应用。

目的与背景

通过本文,读者将深入了解Spring框架中的异常处理机制和策略,学习如何利用Spring提供的工具和注解来实现优雅的异常处理,从而提高软件的可用性和用户满意度。

文章结构概述

本文首先会简要介绍异常处理的基础知识和其在软件开发中的重要性。接着,我们会深入探讨Spring内置的异常处理机制,包括@ExceptionHandler@ControllerAdviceResponseEntityExceptionHandlerErrorController等,并通过实战演示和代码示例来展示如何在实际项目中运用这些机制。

在此基础上,我们还会探讨如何自定义异常处理策略,设计统一的异常响应格式,以及创建和管理业务相关的异常类。此外,文章还会详细讨论状态码与异常的关联,异常日志记录的最佳实践,全局与局部的异常处理策略,以及异常处理的测试策略。

以下所有示例均已上传至Github上,大家可以将项目拉取到本地进行运行

Github示例(如果对Gradle还不熟练,建议翻看我之前的文章):gradle-spring-boot-demo

异常处理的基础知识

在深入探讨Spring的异常处理机制和策略之前,了解和掌握异常处理的基础知识是至关重要的。异常,是程序在运行时可能遇到的不正常情况,它可能导致程序行为的偏差或者终止。在Java中,异常是通过Exception类或其子类来表示的,并且必须被捕获和处理。正确处理异常不仅可以提升程序的健壮性稳定性,优化用户体验,还可以避免可能出现的数据丢失或系统崩溃。

1.1 异常的分类

Java中的异常主要分为受检异常非受检异常

  • 受检异常:受检异常是那些在编译时期,编译器要求我们必须处理的异常。这类异常常由外部因素引起,例如文件未找到、网络连接失败等。开发者必须在代码中显式地捕获并处理这类异常,或通过throws关键字声明将异常抛出。
代码语言:java
AI代码解释
复制
public void readFile() {
    try {
        FileInputStream fileInputStream = new FileInputStream("nonexistent.file");
    } catch (FileNotFoundException e) {
        e.printStackTrace(); // 或者进行其他的异常处理,如记录日志、抛出新的异常等。
    }
}
// 或者
public void readFile() throws FileNotFoundException {
    FileInputStream fileInputStream = new FileInputStream("nonexistent.file");
}
  • 非受检异常:非受检异常,也称为运行时异常,常由程序逻辑错误引起,如空指针、数组越界等。对于这类异常,Java编译器不会强制我们处理,但在实际开发中,捕获并合理处理这类异常是很重要的。作为程序员,这个异常也是容易犯错的地方,因此要把握好边界
代码语言:java
AI代码解释
复制
public void calculateLength() {
    String str = null;
    try {
        int length = str.length(); // 这会抛出NullPointerException
    } catch (NullPointerException e) {
        e.printStackTrace(); // 或者进行其他的异常处理,如记录日志、抛出新的异常等。
    }
}

小结通过深入了解异常的基础知识、概念分类,我们可以更为准确、高效地处理异常,从而更好地利用Spring框架所提供的异常处理能力。这为我们在后续章节中更进一步地学习和实践Spring中的异常处理机制奠定了基础。


Spring内置的异常处理机制

Spring框架为我们提供了一套丰富而完善的异常处理机制,这套机制允许我们在发生异常时能够做出快速且正确的响应,确保程序的稳定性和用户体验。本章我们将探讨Spring中的主要异常处理机制。

2.1 @ExceptionHandler

@ExceptionHandler注解用于在控制器(Controller)内处理异常。这个注解通常与特定的异常类一起使用,用于处理控制器中可能抛出的该异常。通过@ExceptionHandler,我们可以将异常映射到特定的处理方法,返回定制的错误响应。

2.1.1 使用示例
代码语言:java
AI代码解释
复制
@RestController
public class MyController {

    @GetMapping("/endpoint")
    public String endPoint() throws Exception {
        throw new Exception("异常出错!");
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleMyException(Exception e) {
        return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
    }
}

话不多说,我们启动项目,访问http://127.0.0.1:8080/endpoint 页面

我在这里抛出了异常,紧接着异常就被捕获到了:

2.2 @ControllerAdvice

@ControllerAdvice是一个全局异常处理注解,它可以捕获所有控制器中抛出的异常。与@ExceptionHandler结合使用,可以实现全局的异常处理策略,保持错误响应的一致性。

2.2.1 使用示例

我们把上面异常捕获注释掉,并添加如下代码:

代码语言:java
AI代码解释
复制
@ControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(MyException.class)
    public ResponseEntity<String> handleMyException(MyException e) {
        return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
    }
}

同样的访问http://127.0.0.1:8080/endpoint 页面,异常被该类捕获到了

页面输出如下内容:

2.3 ResponseEntityExceptionHandler

ResponseEntityExceptionHandler是一个基础类,我们可以通过继承这个类并覆盖其中的方法,来处理由Spring内部抛出的一系列标准异常,例如MethodArgumentNotValidException等。

2.3.1 使用示例
代码语言:java
AI代码解释
复制
@RestControllerAdvice
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(
            MethodArgumentNotValidException ex,
            HttpHeaders headers,
            HttpStatusCode status,
            WebRequest request){

        // 获取所有的错误信息
        List<String> errorDetails = ex.getBindingResult()
                                      .getFieldErrors()
                                      .stream()
                                      .map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage())
                                      .collect(Collectors.toList());

        // 创建一个错误响应体对象
        ApiError apiError = new ApiError(
            LocalDateTime.now(),
            HttpStatus.BAD_REQUEST,
            "Validation Failed",
            errorDetails
        );

        // 返回定制的错误响应体
        return new ResponseEntity<>(apiError, HttpStatus.BAD_REQUEST);
    }
}

MyController添加如下方法:

代码语言:java
AI代码解释
复制
    @PostMapping("/user")
    public ResponseEntity<String> createUser(@Valid @RequestBody User user) {
        return new ResponseEntity<>("User created successfully!" + user.toString(), HttpStatus.CREATED);
    }

写一个测试用例:

代码语言:java
AI代码解释
复制
    /**
     * 参数校验
     * {@link MyController#createUser}
     */
    @Test
    void shouldReturnBadRequestWhenNameIsBlank() throws Exception {
        String userJson = "{\"name\":\"\"}"; // 空的name应该触发验证失败

        mockMvc.perform(post("/user")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(userJson))
                .andExpect(status().isBadRequest());
    }

执行!参数校验异常被成功捕获到

咳咳,这样控制台没办法打印,我们使用postman来看下,执行结果如下:

参数校验异常被捕获到了,非常清晰:

2.4 ErrorController

通过实现ErrorController接口,我们可以定制错误映射和错误页面,为用户提供更友好的错误提示。

2.4.1 使用示例
代码语言:java
AI代码解释
复制
@RestController
public class CustomErrorController implements ErrorController {

    @RequestMapping("/error")
    public ResponseEntity<Map<String, Object>> handleError() {
        // Customize the error response
        return new ResponseEntity<>(...);
    }
    
    @Override
    public String getErrorPath() {
        return "/error";
    }
}

小结

Spring提供的内置异常处理机制,如@ExceptionHandler@ControllerAdviceResponseEntityExceptionHandlerErrorController,允许我们针对不同场景和需求,实现灵活且全面的异常处理策略。通过熟练运用这些工具,我们可以构建出更加稳定、健壮且用户友好的应用。


自定义异常处理

虽然Spring提供了一套丰富的异常处理机制,但在某些情况下,我们可能会需要更加个性化和灵活的异常处理策略。在这种情况下,我们可以通过自定义异常处理来满足我们的需求。以下,我们将探讨如何在Spring中实现自定义异常处理。

3.1 定义自定义异常

自定义异常通常继承自RuntimeExceptionException。通过创建自定义异常,我们可以更精确地表达和捕获特定的错误情况。

3.1.1 创建自定义异常
代码语言:java
AI代码解释
复制
public class CustomException extends RuntimeException {
    public CustomException(String message) {
        super(message);
    }
}

3.2 自定义异常处理器

自定义的异常处理器可以使用@ExceptionHandler@ControllerAdvice来实现,这使我们可以有更多的控制权来定制异常的响应。

3.2.1 创建自定义异常处理器
代码语言:java
AI代码解释
复制
@ControllerAdvice
public class CustomExceptionHandler {
    @ExceptionHandler(CustomException.class)
    public ResponseEntity<String> handleCustomException(CustomException e) {
        return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
    }
}

3.3 自定义错误响应

我们还可以定制异常的响应格式,例如,可以包含错误代码、错误消息、时间戳等,以提供更多的错误信息。

3.3.1 定义错误响应类
代码语言:java
AI代码解释
复制
public class ErrorResponse {
    private int status;
    private String message;
    private long timestamp;
    
    // Constructors, getters and setters
}
3.3.2 返回自定义错误响应
代码语言:java
AI代码解释
复制
@ControllerAdvice
public class CustomExceptionHandler {
    
    @ExceptionHandler(CustomException.class)
    public ResponseEntity<ErrorResponse> handleCustomException(CustomException e) {
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.BAD_REQUEST.value(), e.getMessage(), System.currentTimeMillis());
        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }
}

小结

通过自定义异常处理,我们可以构建出更加精确和灵活的异常处理策略,以满足特定的业务需求。自定义异常、异常处理器和错误响应允许我们全面掌控异常处理的每个环节,实现真正意义上的个性化异常处理。


状态码与异常

在Web应用中,HTTP状态码是服务端向客户端报告请求结果的一种重要方式。通过合适的状态码,服务端可以明确地告知客户端请求是成功还是失败,以及失败的原因。下面,我们将详细讨论如何在Spring中正确使用HTTP状态码来表示异常。

4.1 HTTP状态码概述

HTTP状态码由三位数字组成,其中第一位数字定义了状态码的类型。常见的状态码类型包括:

  • 2xx:成功。表示请求已被成功接收、理解和接受。
  • 4xx:客户端错误。表示客户端似乎有错误,例如,无效的请求或无法找到资源。
  • 5xx服务器错误。表示服务器未能完成明显有效的请求。

4.2 状态码与异常的关系

在Spring中,我们通常使用ResponseEntity来表示HTTP响应,其中包含了状态码和响应体。当发生异常时,我们应该返回代表错误的状态码,如400 Bad Request500 Internal Server Error,并在响应体中提供错误的详细信息。

4.2.1 使用ResponseEntity返回状态码
代码语言:java
AI代码解释
复制
@RestController
public class MyController {

    @GetMapping("/myEndpoint")
    public ResponseEntity<String> myEndpoint() {
        // ...
        return new ResponseEntity<>("Error Message", HttpStatus.BAD_REQUEST);
    }
}

4.3 使用@ResponseStatus定义状态码

@ResponseStatus注解允许我们在异常类或处理方法上直接指定HTTP状态码。当该异常被抛出时,Spring会自动使用指定的状态码作为HTTP响应的状态码。

4.3.1 在异常类上使用@ResponseStatus
代码语言:java
AI代码解释
复制
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Resource not found")
public class ResourceNotFoundException extends RuntimeException {
}
4.3.2 在处理方法上使用@ResponseStatus
代码语言:java
AI代码解释
复制
@RestController
public class MyController {

    @GetMapping("/myEndpoint")
    public String myEndpoint() {
        // ...
        throw new ResourceNotFoundException();
    }
    
    @ExceptionHandler(ResourceNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public String handleResourceNotFoundException() {
        return "Resource not found";
    }
}

小结

正确使用HTTP状态码可以使我们的应用更加符合HTTP协议,也使客户端更容易理解响应的含义。通过ResponseEntity@ResponseStatus,我们可以灵活地为异常指定合适的状态码,从而实现更加准确和清晰的错误报告。


异常处理的最佳实践

在Spring中,细致而明智地处理异常是至关重要的,因为它直接影响到软件的稳定性和用户体验。这一节将通过实例探讨一些在Spring中处理异常的最佳实践。

5.1 准确的异常类型

正确选择异常类型是关键。例如,当遇到无效用户输入时,应该选择IllegalArgumentException而非一般的RuntimeException。具体的异常类型可以给予更多的上下文,助力快速定位问题。

代码语言:java
AI代码解释
复制
if (userInput == null) {
    throw new IllegalArgumentException("User input cannot be null");
}

5.2 自定义异常

当内置异常无法精确表达问题时,应定义自定义异常。这些异常应该扩展自RuntimeException或其他适合的父类,并清晰地表达异常的本质。

代码语言:java
AI代码解释
复制
public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String userId) {
        super("User with ID " + userId + " not found");
    }
}

5.3 清晰准确的错误信息

错误信息必须清晰且准确。它们应该提供足够的细节来帮助理解问题所在,避免模糊且无用的描述。

代码语言:java
AI代码解释
复制
throw new UserNotFoundException(userId);

5.4 妥善处理异常堆栈

异常堆栈包含宝贵的调试信息。在开发环境下,我们应记录完整的异常堆栈,但在生产环境,应避免将详细的异常堆栈暴露给用户。

代码语言:java
AI代码解释
复制
logger.error("Exception occurred", exception);

5.5 使用HTTP状态码

返回合适的HTTP状态码是通信的基础。例如,400 Bad Request应该用于无效的用户输入,而500 Internal Server Error用于服务器错误。

代码语言:java
AI代码解释
复制
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Invalid user input");

5.6 日志记录

每一处异常都应被适当地记录,携带异常类型、信息和堆栈。日志应足够详细,以支持快速的问题定位和解决。

代码语言:java
AI代码解释
复制
logger.error("User not found: {}", userId, exception);

5.7 测试异常处理

异常处理逻辑也需经过严格测试,通过单元和集成测试来保证逻辑的正确性和健壮性。

代码语言:java
AI代码解释
复制
@Test
void shouldThrowUserNotFoundException() {
    Assertions.assertThrows(UserNotFoundException.class, () -> {
        userService.findUser("invalidId");
    });
}

小结

遵循这些最佳实践能够确保你的异常处理逻辑既清晰又准确,进而降低错误率并提升用户满意度。记住,优雅的异常处理不仅可以简化开发工作,而且能在问题出现时提供有力支持。

总结

在开发复杂的Spring应用程序时,异常处理是不可或缺的一环。合理而有效的异常处理不仅能够提高应用程序的健壮性和稳定性,还能够优化用户体验,减少开发和维护的难度。

在Spring中,有效的异常处理要求我们深入理解异常处理机制、策略和最佳实践。我们需要细心地设计和测试我们的异常处理逻辑,确保它们能够在实际运行中满足预期,为用户提供友好而准确的错误信息,同时也为开发者提供足够的信息来定位和解决问题。希望本文能够帮助读者更好地理解Spring中的异常处理,以及如何设计和实施有效的异常处理策略。

参考文献

  1. Spring、SpringBoot统一异常处理的3种方法 - CSDN
  2. Spring Boot 全局异常处理整理!开发必会! - 知乎
  3. Spring Boot项目优雅的全局异常处理方式(全网最新) - CSDN
  4. 基于Spring Cloud Gateway 的统一异常处理 - 掘金
  5. Spring Cloud 如何统一异常处理?写得太好了! - 腾讯云

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Boot:优雅地处理全局异常以及格式化输出
在Spring Boot应用程序中,全局异常处理是一种非常重要的功能。它可以帮助我们捕获未处理的异常,进行统一处理,并返回给客户端一个友好的错误信息。本文将介绍如何使用Spring Boot优雅地处理全局异常,并提供一些实用的代码示例。
Front_Yue
2024/07/24
1.7K0
Spring Boot:优雅地处理全局异常以及格式化输出
异常处理的简化与优化:提高代码可读性与可维护性
在Java开发中,异常处理是不可避免的,良好的异常处理可以提高代码的稳定性、可读性和可维护性。面对复杂的项目和多样的错误场景,如何有效地处理异常是每个开发者都需要掌握的技能。本文将介绍如何通过统一处理常见异常和使用自定义异常来优化Java代码中的异常处理,帮助你减少冗余代码,提高代码的可读性和可维护性。
默 语
2025/02/02
1320
SpringBoot 定义优雅全局统一 Restful API 响应和统一异常处理,太优雅了!
假如你作为项目组长,为 Spring Boot 项目设计一个规范的统一的RESTfulAPI 响应框架。
码哥字节
2024/11/23
3510
SpringBoot 定义优雅全局统一 Restful API 响应和统一异常处理,太优雅了!
Spring Cloud Gateway-自定义异常处理
我们平时在用SpringMVC的时候,只要是经过DispatcherServlet处理的请求,可以通过@ControllerAdvice和@ExceptionHandler自定义不同类型异常的处理逻辑,具体可以参考ResponseEntityExceptionHandler和DefaultHandlerExceptionResolver,底层原理很简单,就是发生异常的时候搜索容器中已经存在的异常处理器并且匹配对应的异常类型,匹配成功之后使用该指定的异常处理器返回结果进行Response的渲染,如果找不到默认的异常处理器则用默认的进行兜底(个人认为,Spring在很多功能设计的时候都有这种“有则使用自定义,无则使用默认提供”这种思想十分优雅)。
Throwable
2020/06/23
3.8K1
Spring Cloud Gateway-自定义异常处理
一起来学SpringBoot | 第十八篇:轻松搞定全局异常
实际项目开发中,程序往往会发生各式各样的异常情况,特别是身为服务端开发人员的我们,总是不停的编写接口提供给前端调用,分工协作的情况下,避免不了异常的发生,如果直接将错误的信息直接暴露给用户,这样的体验可想而知,且对黑客而言,详细异常信息往往会提供非常大的帮助...
battcn
2018/08/03
6560
一起来学SpringBoot | 第十八篇:轻松搞定全局异常
重学SpringBoot系列之统一全局异常处理
答:因为用户不认识ConnectionTimeOutException类似这种异常是什么东西,但是转换为自定义异常就要求程序员对运行时异常进行一个翻译,比如:自定义异常里面应该有message字段,后端程序员应该明确的在message字段里面用面向用户的友好语言,说明服务端发生了什么。
大忽悠爱学习
2021/12/07
1K0
重学SpringBoot系列之统一全局异常处理
探索 Spring Boot 高级应(四)用:Thymeleaf、全局异常处理与 AOP
大家好,我是默语,一个专注于分享技术干货的博主。这篇博客将深入探讨Spring Boot的高级应用,涵盖Thymeleaf模板引擎的集成、全局异常处理以及AOP切面的实现。通过丰富的代码案例和详细的讲解,希望能够帮助大家全面掌握这些高级技术,提高项目的开发效率和代码质量。关键词包括Spring Boot集成Thymeleaf、全局异常处理、Spring Boot AOP等。
默 语
2024/11/20
1410
张三进阶之路 | 基于SpringCloud的异常处理
张三,一位充满热情和创造力的程序猿,就职于一家名为 "CloudBookStore" 的在线书店。这家书店采用了先进的 Spring Cloud 技术栈进行构建,为用户提供了一个直观且易于使用的界面。用户可以在这个界面上浏览、搜索和购买各类书籍,同时,CloudBookStore 还提供了一个功能强大的 API,供第三方开发者集成和扩展其功能。
不惑
2024/04/24
1630
张三进阶之路 | 基于SpringCloud的异常处理
SpringMVC的异常处理(一)
SpringMVC是一种流行的Java Web框架,它为开发人员提供了一种快速、高效的方式来构建Web应用程序。在任何Web应用程序中,异常处理是一个必要的组件,因为它可以帮助我们处理错误和异常情况。SpringMVC提供了一个强大的异常处理机制,使得开发人员能够捕获和处理不同类型的异常,从而提高应用程序的可靠性和可维护性。
堕落飞鸟
2023/05/14
2400
译:如何使用Spring优雅地处理REST异常
本文将举例说明如何使用Spring来实现REST API的异常处理。我们将同时考虑Spring 3.2和4.x推荐的解决方案,同时也会考虑以前的解决方案。
烟雨平生
2023/03/07
1.3K0
译:如何使用Spring优雅地处理REST异常
使用枚举简单封装一个优雅的 Spring Boot 全局异常处理!
通过这篇文章,可以搞懂如何在 Spring Boot 中进行异常处理。但是,光是会用了还不行,我们还要思考如何把异常处理这部分的代码写的稍微优雅一点。下面我会以我在工作中学到的一点实际项目中异常处理的方式,来说说我觉得稍微优雅点的异常处理解决方案。
Guide哥
2020/05/07
1.5K0
springboot自定义异常界面跳转
机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。对于浏览器客户端,响应一个“ whitelabel”错误视图,以HTML格式呈现相同的数据
一个风轻云淡
2022/11/13
6550
【面试题精讲】Springboot应用异常处理
Spring Boot应用异常处理是指在Spring Boot应用中对异常进行捕获和处理的机制。当应用发生异常时,可以通过异常处理机制来捕获异常并进行相应的处理,例如返回友好的错误信息给用户,记录异常日志等。
程序员朱永胜
2023/09/25
3160
Spring Boot 2 Webflux的全局异常处理
本文首先将会回顾Spring 5之前的SpringMVC异常处理机制,然后主要讲解Spring Boot 2 Webflux的全局异常处理机制。
aoho求索
2018/12/29
4.1K0
【SpringBoot web-3】web项目统一数据封装与全局异常处理
阿里巴巴的 fastjson是目前应用最广泛的JSON解析框架。本文也将使用fastjson。
云深i不知处
2020/09/16
7900
掌握 Spring 之异常处理
这次我们学习 Spring 的异常处理,作为一个 Spring 为基础框架的 Web 程序,如果不对程序中出现的异常进行适当的处理比如异常信息友好化,记录异常日志等等,直接将异常信息返回给客户端展示给用户,对用户体验有不好的影响。所以本篇文章主要探讨通过 Spring 进行统一异常处理的几种方式实现,以更优雅的方式捕获程序发生的异常信息并进行适当的处理响应给客户端。
闻人的技术博客
2019/09/19
1.8K0
掌握 Spring 之异常处理
Spring Boot2.x-11 使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常
我们在Spring Boot2.x-07Spring Boot2.1.2整合Mybatis这边文章的基础上来实现下Spring Boot使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常。
小小工匠
2021/08/17
9790
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/10/22
5K0
@ExceptionHandler or HandlerExceptionResolver?如何优雅处理全局异常?【享学Spring MVC】
SpringBoot中REST API的错误异常处理设计
RESTful API中的异常Exception处理有两个基本要求,需要明确业务意义的错误消息以及hhtp状态码。良好的错误消息能够让API客户端纠正问题。在本文中,我们将讨论并实现Spring的REST API异常处理。 Restful API错误/异常设计 在RESTful API中设计异常处理时,最好在响应中设置HTTP状态代码,这样可以表示客户端的请求为什么会失败的原因。当然也可以发送更多信息包括HTTP状态码,这些将帮助客户端迅速定位错误。 比如下面是Springboot表示/api/pro
lyb-geek
2018/08/16
7.2K0
猫头鹰的深夜翻译:Spring REST服务异常处理
这篇教程主要专注于如何优雅的处理WEB中的异常。虽然我们可以手动的设置ResponseStatus ,但是还有更加优雅的方式将这部分逻辑隔离开来。Spring提供了整个应用层面的异常处理的抽象,并且只是要求您添加一些注释 - 它会处理其他所有内容。下面是一些代码的示例
眯眯眼的猫头鹰
2019/03/13
7900
推荐阅读
相关推荐
Spring Boot:优雅地处理全局异常以及格式化输出
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档