认识基于Spring的REST 3. Java配置 4. 测试Spring上下文 5. 控制器 6. 映射HTTP响应状态码 6.1. 未映射的请求 6.2.有效的映射请求 6.3....使用@ExceptionHandler 7. 附加的Maven依赖项 8. 总结 1. 概览 本文展示了如何在Spring中配置REST——控制器和HTTP状态响应码、有效负载编排和内容协商的配置。...未映射的请求 如果Spring MVC接收到没有映射的请求,则认为不允许该请求,并将405 METHOD NOT ALLOWED返回给客户端。...有效的映射请求 对于任何具有映射的请求,Spring MVC都认为该请求有效,如果没有另外指定其他状态代码,则使用200 OK进行响应。...使用 @ExceptionHandler 在特定状态码上映射自定义异常的另一个选项是在控制器中使用@ExceptionHandler注解。
这个注解通常与特定的异常类一起使用,用于处理控制器中可能抛出的该异常。通过@ExceptionHandler,我们可以将异常映射到特定的处理方法,返回定制的错误响应。...4.2 状态码与异常的关系 在Spring中,我们通常使用ResponseEntity来表示HTTP响应,其中包含了状态码和响应体。...当发生异常时,我们应该返回代表错误的状态码,如400 Bad Request或500 Internal Server Error,并在响应体中提供错误的详细信息。...当该异常被抛出时,Spring会自动使用指定的状态码作为HTTP响应的状态码。...合理而有效的异常处理不仅能够提高应用程序的健壮性和稳定性,还能够优化用户体验,减少开发和维护的难度。 在Spring中,有效的异常处理要求我们深入理解异常处理机制、策略和最佳实践。
本篇概览 Spring Cloud Gateway应用中,处理请求时若发生异常未被捕获,请求方收到的响应是系统默认的内容,无法满足实际业务需求 因此,从前一篇文章《Spring Cloud Gateway...过滤器精确控制异常返回(分析篇)》开始,咱们深入分析了Spring Cloud Gateway的相关源码,了解到全局异常的处理细节,然后,通过前文《Spring Cloud Gateway过滤器精确控制异常返回...(实战,控制http返回码和message字段)》的实战,咱们已经能随意设置http返回码,以及body中的message字段,也就是控制下图两个红框中的内容: 正如上图所示,异常发生时系统固定返回8...个字段,这就有些不够灵活了,在一些对格式和内容有严格要求的场景下,咱们需要能够完全控制返回码和返回body的内容,如下所示,只返回三个字段,每个字段都是完全为业务服务的: { # 这是有具体业务含义的返回码...,如下图红框所示: 为何不用常规手段 提到全局异常处理,经验丰富的您应该想到了常用的ControllerAdvice和ExceptionHandler注解修饰的全局异常处理类,但是Spring Cloud
解决方案 1 – 控制器作用域的注解 @ExceptionHandler 第一个解决方案是在@Controller作用域有效——我们将定义一个处理异常的方法,并给这个方法添加@ExceptionHandler...它用于将Spring中的标准异常解析为对应的HTTP状态码,即客户端错误——4xx和服务器错误——5xx状态码。这是Spring异常的完整列表,以及这些异常对应的HTTP状态码。...虽然它确实正确地设置了响应的状态码,但有一个缺陷是它不会改变响应体。...——它确实重新设定了响应的状态码,但是响应体仍然是空的。...另一个重要的实现细节是返回一个ModelAndView ——这是响应体,它将允许应用程序设置它所需要的任何东西。 对于Spring REST服务的异常处理来说,这种方法是一种一致且易于配置的机制。
另外,当我们抛出自定义异常的时候全局异常处理只响应了异常中的错误信息msg给前端,并没有将错误代码code返回。这还需要配合数据统一响应。...这里我包括了响应信息代码code和响应信息说明msg,首先可以设置一个枚举规范响应体中的响应码和响应信息。...,就真正做到了响应数据格式、响应码和响应信息规范化、统一化!...(可选择) 接口返回统一响应体 + 异常也返回统一响应体,其实这样已经很好了,但还是有可以优化的地方。...、timestamp未超时、缓存服务器中不存在sign三种情况同时满足,本次请求才有效; 6、采用HTTPS通信协议 安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了
RESTful API中的异常Exception处理有两个基本要求,需要明确业务意义的错误消息以及hhtp状态码。良好的错误消息能够让API客户端纠正问题。...比如 @ExceptionHandler注释,@ExceptionHandler是一个Spring注释,以处理请求引发的异常。此注释在@Controller级别上起作用。...有效。...这是在使用基于Spring的REST API时的一种便捷方式,因为可以指定ResponseEntity为返回值。...看一个简单的用例,当客户端API通过其唯一ID调用后端存储库查找记录时,如果找不到该记录,我们的存储库类会返回null或空对象,在这种情况下,即使找不到我们想要的资源记录,API也会向客户端返回http
前言 这次我们学习 Spring 的异常处理,作为一个 Spring 为基础框架的 Web 程序,如果不对程序中出现的异常进行适当的处理比如异常信息友好化,记录异常日志等等,直接将异常信息返回给客户端展示给用户...所以本篇文章主要探讨通过 Spring 进行统一异常处理的几种方式实现,以更优雅的方式捕获程序发生的异常信息并进行适当的处理响应给客户端。...ModelAndView 可以看出,这个属于 Spring MVC 框架中的接口,实现此方法就可以对捕获的异常进行解析处理,然后根据自身需要返回 ModelAndView 对象,以 JSON 数据或者页面形式响应客户端请求...5.0 引入,关联 HTTP 状态码和可选的原因,我们直接就可以在请求方法中构建这个异常对象进行返回,使用起来十分简单: @GetMapping("/exception4") public ResponseEntity...String param) { throw new ResponseStatusException(HttpStatus.NOT_FOUND, "资源未找到"); } 使用这种方式虽然能直接返回响应码和具体原因
SpringMVC是Spring框架中的一个模块,它提供了一种基于注解的MVC框架,使得开发Web应用程序变得更加简单和灵活。...基于注解的异常处理SpringMVC提供了许多注解来帮助我们处理异常,其中最常用的注解是@ExceptionHandler。...通过使用@ExceptionHandler注解,我们可以为特定类型的异常定义一个异常处理器方法。当应用程序中抛出这个类型的异常时,SpringMVC会自动调用该方法,并将异常作为参数传递给方法。...如果email参数不是有效的电子邮件地址,该方法将抛出一个InvalidEmailException异常。...当应用程序发生此异常时,handleInvalidEmailException方法将返回一个HTTP状态码为400的响应,并将异常消息包含在响应体中。
SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势 虽然 http 的提供了一整套完整、定义明确的状态码,但实际的业务支持中,后端并不总会遵守这套规则,更多的是在返回结果中...如果看过 web 系列教程中的:SpringBoot 系列教程 web 篇之全局异常处理 可能就会有一些映象,配合@ExceptionHandler来根据异常返回对应的状态码 一个推荐的使用姿势,下面表示当你的业务逻辑中出现数组越界时...,返回 500 的状态码以及完整的堆栈信息 @ResponseBody @ExceptionHandler(value = ArrayIndexOutOfBoundsException.class) @...http code,会设置对响应头;如果是自定义的不被识别的 code,那么返回的 http code 是 500 4, 小结 上面介绍了几种常见的设置响应 http code 的姿势,下面小结一下使用时的注意事项...ResponseStatus 只支持标准的 http code 装饰自定义异常类,使用时抛出对应的异常类,从而达到设置响应 code 的效果 缺点对非可控的异常类不可用 结合@ExceptionHandler
Spring提供了整个应用层面的异常处理的抽象,并且只是要求您添加一些注释 - 它会处理其他所有内容。...下面是一些代码的示例 如何手动处理异常 下面的代码中, DogController将返回一个ResponseEntity实例,该实例中包含返回的数据和HttpStatus属性 如果没有抛出任何异常,则下面的代码将会返回...List数据作为响应体,以及200作为状态码 对于DogsNotFoundException,它返回空的响应体和404状态码 对于DogServiceException, 它返回500状态码和空的响应体...catch部分的代码在很多其它地方也会使用到(比如删除,更新等操作) Controller Advice Spring提供了一种更好的解决方法,也就是Controller Advice。...handleDogsServiceException: 这个方法会处理DogServiceException并返回INTERNAL_SERVER_ERROR状态码 这种实现的关键就在于在代码中捕获需检查异常并将其作为
,匹配成功之后使用该指定的异常处理器返回结果进行Response的渲染,如果找不到默认的异常处理器则用默认的进行兜底(个人认为,Spring在很多功能设计的时候都有这种“有则使用自定义,无则使用默认提供...route(acceptsTextHtml(), this::renderErrorView).andRoute(all(), this::renderErrorResponse); } // HTTP响应状态码的封装...原来的RouterFunction实现只支持HTML格式返回,我们需要修改为JSON格式返回(或者说支持所有格式返回)。...DefaultErrorWebExceptionHandler#getHttpStatus()是响应状态码的封装,原来的逻辑是基于异常属性getErrorAttributes()的status属性进行解析的...; } 很简单,这里把异常的HTTP响应状态码统一为HttpStatus.INTERNAL_SERVER_ERROR(500),改造的东西并不多,只要了解原来异常处理的上下文逻辑即可。
当我们的后端应用出现异常时,通常会将异常状况包装之后再返回给调用方或者前端,在实际的项目中,不可能对每一个地方都做好异常处理,再优雅的代码也可能抛出异常,那么在 Spring 项目中,可以怎样优雅的处理这些异常呢...本文将介绍一种全局异常处理方式,主要包括以下知识点 @ControllerAdvice Controller 增强 @ExceptionHandler 异常捕获 @ResponseStatus 返回状态码...测试说明 实例测试如下,上面我们声明捕获的两种异常被拦截并输出对应的堆栈信息; 但是需要注意 404 和未捕获的 500 异常则显示的 SpringBoot 默认的错误页面; 此外我们捕获返回的 http...状态码是 200 ?...@ResponseStatus 上面的 case 中捕获的异常返回的状态码是 200,但是在某些 case 中,可能更希望返回更合适的 http 状态码,此时可以使用ResponseStatus来指定
一 定义响应状态码及信息的枚举类 @Getter public enum CodeEnum { SUCCESS(0,"请求成功"), ERROR(500,"未知异常"),...Serializable { private static final long serialVersionUID = 572235155491705152L; /** * 响应的状态码...* 响应数据 */ private T data; /** * 放入响应码并返回 * @param code * @param msg...this.code = code; this.message = msg; return this; } /** * 放入响应码并返回... 此是spring-boot-route系列的第四篇文章,这个系列的文章都比较简单,主要目的就是为了帮助初次接触Spring Boot 的同学有一个系统的认识。
Spring提供了多种方式将异常转换为响应: 特定的Spring异常将会自动映射为指定的HTTP状态码; 异常上可以添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码; 在方法上可以添加...3.1将异常映射为HTTP状态码 在默认情况下,Spring会将自身的一些异常自动转换为合适的状态码。...Spring的一些异常会默认映射为HTTP状态码 Spring异常 HTTP状态码 BindException 400 - Bad Request ConversionNotSupportedException...如果findOne()方法能够返回Spittle对象的话,那么会将Spittle放到模型中,然后名为spittle的视图会负责将其渲染到响应之中。...实际上,如果出现任何没有映射的异常,响应都会带有500状态码,故返回的不精确,可以修改。
一、异常处理 Spring提供了多种方式将异常转换为响应: 特定的Spring异常将会自动映射为指定的HTTP状态码 在默认情况下,Spring会将自身的一些异常自动转换为合适的状态码,从而反馈给客户端...实际上,如果没有出现任何映射的异常,响应都会带有500状态码。映射表如下: ?...自定义异常上可以添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码 尽管这些内置映射是很有用的,但是当我们的业务系统出现RuntimeException时,如果Spring...找不到对应的内置映射,就默认是500的状态码,如果我们不想要500的状态码呢?...@ControllerAdvice public class ExceptionHandle { /** * 当出现异常的时候,就返回error页面,当然可以多写几个ExceptionHandler
@ExceptionHandler 标记的方法返回值类型支持多种。可以是视图,也可以是 json 等。...完全控制响应的主体以及状态码 将多个异常映射到同一方法,以一起处理,并且它充分利用了更新的 Restful ResponseEntity 响应 缺点: 一个 Controller 中的 @ExceptionHandler...支持多种格式的响应,虽然覆写的方法返回的是 ModelAndView 但是因为参数中有 HttpServletResponse, 我们可以利用它来进行定制响应结果。...例如,如果客户端要求输入application / json,那么在出现错误情况时,我们要确保我们返回一个以application / json编码的响应。...Spring Boot 中的异常处理 如果你用的框架是 Spring Boot 。 我们还可以用它独特的处理方式。优点是屏蔽了低级的API,缺点也比较明显,无法捕捉到具体的异常。
文章目录 概述 未使用全局异常且未显式捕获异常的情况 使用全局异常 Step1. 自定义异常类 Step2. 封装异常信息模板 Step3. 全局异常处理类 Step4....使用全局异常 小结 概述 我们在Spring Boot2.x-07Spring Boot2.1.2整合Mybatis这边文章的基础上来实现下Spring Boot使用@ControllerAdvice和...源码 ,提示不友好 如果未使用全局异常的情况下,大量使用try-catch,难以阅读,有些时候因为异常被try-catch捕获导致@Transactional注解失效 比如我们之前写的o2o的项目...---- 未使用全局异常且未显式捕获异常的情况 我们先看下如果没有全局异常,并且也没有对异常进行捕获,直接使用Spring Boot默认的异常显示会怎样呢? 先把个字段名故意写错来看下, ?...封装异常信息模板 统一返回的异常信息的格式 package com.artisan.exception; import lombok.Getter; /** * 统一返回的异常信息的格式 *
去掉继承类,则返回:全局提醒-接口运行失败。从结果来看,BaseController里面的ExceptionHandler已经捕获了异常,所以全局异常处理器的就给忽略了。...ResponseStatusExceptionResolver 用于处理ResponseStatusException异常,该类根据异常的状态码和原因消息来生成一个相应的HTTP响应。...Spring 会从当前控制器类中查找是否有匹配的@ExceptionHandler方法。如果有多个@ExceptionHandler方法,Spring 会根据异常类型和方法参数来选择最匹配的一个。...如果在当前控制器类中没有找到匹配的@ExceptionHandler方法,Spring 会向上搜索控制器的父类,看看是否有匹配的方法。...如果全局异常处理器也没有处理这个异常,那么 Spring 就会把异常传递给容器,由容器来决定如何处理这个异常。通常,容器会把异常信息写入到响应中,并返回一个错误状态码。
Spring框架的MVC模块在错误处理方面提供了一些很不错的功能,但是这些功能需要由开发人员主动调用,才能返回对API客户端的有具体意义的响应。 我们来看一下这个Spring Boot默认响应的例子。...比较常见的情况是:http返回码400表示BAD_REQUEST,例如,客户端发送了格式不正确的字段(如无效的电子邮件地址)。 timestamp属性保存了发生错误的日期时间。...RestController是用于REST操作类的最基本的注解。 ExceptionHandler这个Spring注解提供了一种机制,用来处理在执行程序期间抛出的异常。...这意味着如果我们的服务只是调用这个方法并直接返回给控制器,那么即使找不到资源,我们也会得到HTTP返回码200(OK)。...实际上,正确的方法是返回HTTP/1.1规范中指定的HTTP返回码404(NOT FOUND)。 为了处理这种情况,我们将创建一个名为EntityNotFoundException的自定义异常。
Spring MVC 不依赖 JSP,可以使用其他模板引擎(JSP,thymeleaf等)。RESTful API 返回的 JSON 格式可以理解为 json View,也是 MVC。...8和9、DispactcherServlet 将视图的呈现内容返回,响应到请求内容给客户端。...ResponseEntity中可以包含响应相关的元数据(如头部信息和状态码)以及要转换的对象实体。...MVC 提供了多种形式将异常转化成 响应: 特定的 Spring 异常将自动映射到 HTTP 的状态码 异常上使用 @ReponseStatus 注解,可以将其对应到某个 HTTP 状态码 方法上使用...@ResponseStatus 注解的自定义异常,将自动映射到 HTTP 的状态码: @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "啊呜
领取专属 10元无门槛券
手把手带您无忧上云