前几天刚给大家介绍过Spring Framework 5.3.6的最新发布内容(Spring Framework 5.3.6、5.2.14 发布) 今天就给大家介绍Spring Boot 2.4.5...喜欢的小伙伴记得点赞、转发、关注! Spring Boot 2.4.5和2.3.10本次版本主要分别优化了 57 个和 78 个内容,光看数量的确不少,让小编带你一起看下吧。...Boot应用程序时#25796 6、DefaultErrorWebExceptionHandler未删除元类型当出现质量值时 #25778 7、JVM退出时,未打包的JAR不会被删除 #25773 8...、TLD模式未与Tomcat对齐 #25764 9、URI标记http.client.requests请求度量忽略REST模板的根URI #25744 10、执行器的rest模板度量定制阻止RootUriRequestExpectationManager.forRestTemplate...、如果配置了多个架构或数据脚本位置,并且在一个位置上找不到任何资源,则无法判断哪个位置出错 #25620 15、生成映像挂起如果在Spring Boot插件配置中指定了finalName启动spring-boot
bean都将添加到转换器列表中。...您也可以以相同的方式覆盖默认转换器。...28.1.6欢迎页面 Spring Boot支持静态和模板化的欢迎页面。它首先在配置的静态内容位置中查找 index.html 文件。如果找不到,则会查找 index 模板。...28.1.8路径匹配和内容协商 Spring MVC可以通过查看请求路径并将其与应用程序中定义的映射相匹配(例如,关于Controller方法的 @GetMapping 注释),将传入的 HTTP请求映射到处理程序...这被认为是Spring MVC应用程序的 最佳实践。对于没有发送正确“接受”请求标头 的HTTP客户端,此功能在过去主要有用; 我们需要确保将正确的内容类型发送给客户端。如今,内容协商更加可靠。
2.4.1版本内容 由于在Spring Boot 2.4.0版本中,对原有的配置加载机制做了较大改动,不少开发者反映在升级的时候也出现了各种不同的问题。...下面我们一起看看这次都解决了哪些重要问题: 通过通配符匹配的配置文件互相覆盖的问题 配置属性与JavaBean之间绑定的顺序问题 允许递归配置文件组的引用 外部应用程序属性加载顺序的问题 @Name在Kotlin...中绑定失败的问题 Redis健康检查器对性能消耗过大的问题 Actuator端点在MVC和WebFlux下运行时,无法正确响应自定义HTTP状态码 Actuator的env端点没有正确显示包装类型的数据...通过配置树绑定非字符串属性时,找不到转换器的问题 使用Log4J调用LoggingSystem时会抛出NullPointerException的问题 加载属性文件的时候,“#”标注之后的内容会丢失 在启用...---- 更多关于本版本的发布内容和相关Issue可通过本链接查看: https://github.com/spring-projects/spring-boot/releases/tag/v2.4.1
附加的Maven依赖项 8. 总结 1. 概览 本文展示了如何在Spring中配置REST——控制器和HTTP状态响应码、有效负载编排和内容协商的配置。 2....@RequestBody将方法的参数绑定到HTTP请求体,而@ResponseBody对响应和返回类型做同样的事情。 它们还确保使用正确的HTTP转换器对资源进行编排和反编排。...内容协商将主要基于Accept头来选择使用哪个可用的转换器,但是也可以使用其他HTTP头来确定资源特定格式的表述。 6....总结 本教程演示了如何使用Spring 4和Java配置来实现一个REST服务,讨论了HTTP响应码、基本内容协商和编排。...在本系列的下一篇文章中,我将重点讨论 API的可发现性、高级内容协商以及其它的处理和传输资源状态的方式。 这篇文章的所有代码都可以在Github上找到。
= null) { selectedMediaType = selectedMediaType.removeQualityValue(); // 遍历所有的消息转换器 找到可以将指定类型转为媒体类型的消息转换器...throw new HttpMediaTypeNotAcceptableException(this.allSupportedMediaTypes); } } // ... } 内容协商...客户端以请求头的形式告诉服务器它能接受什么样的响应数据,和返回值处理器能生产的对比,找到返回值处理器能生产的,客户端能接受的媒体类型 Accept:text/html,application/xhtml...找到合适的返回值处理器(一个返回值处理器里面有多个消息转换器) 找到合适的消息转换器(在寻找消息转换器的时候用到了内容协商,客户端能接受什么样的媒体类型,服务器能生产什么样的媒体类型,找到一个最合适的浏览器能接受的...,服务器能生产的媒体类型,然后遍历返回值处理器中的消息转换器,看看那个能支持内容协商找到的媒体类型) 用消息转换器将返回值写入到响应中
HTTP内容协商 虽然本文主要是想说Spring MVC中的内容协商机制,但是在此之前是很有必要先了解HTTP的内容协商是怎么回事(Spring MVC实现了它并且扩展了它更为强大~)。...方式 http的内容协商方式大致有两种: 服务端将可用列表(自己能提供的MIME类型们)发给客户端,客户端选择后再告诉服务端。这样服务端再按照客户端告诉的MIME返给它。...关于更多Http中的Content-Type的内容,我推荐参见此文章:Http请求中的Content-Type ---- Spring MVC内容协商 Spring MVC实现了HTTP内容协商的同时,...format参数,URL变得冗余繁琐,缺少了REST的简洁风范。...这就是Spring Boot默认的对异常处理方式:它使用的就是基于 固定类型(produces)实现的内容协商。
的消息转换器没有指定Content-Type,所以如果我们直接使用的话会收到text/html类型的消息。...如果我们使用其他的转换器,或者希望自己指定内容协定的策略,就需要自定义内容协定了。内容协定需要两个类来支持:内容协定视图解析器用来指定要使用的视图;内容协定管理器用于配置内容协定的策略。...如果没有视图解析器满足需要的媒体类型,就会使用默认视图来渲染。 下面是一个配置内容协定视图解析器的例子。由于我们使用@ResponseBody直接向响应输出结果并通过消息转换器转换。...内容协商管理器用于指定内容协商的策略。...由于一般内容协定常用于Rest程序,所以最常用的还是通过路径扩展名和Accept头来判断媒体类型。
3.1、这是由类容协商决定的 3.2、带来了 2 个问题 4、客户端如何告诉服务器端自己能够接受的内容类型?...3.1、这是由类容协商决定的 服务器端和请求端协商决定最终返回什么格式的内容。...客户端发送请求的时候可以告知服务器端,自己希望对方返回的数据格式列表,而服务器端的接口也有自己能够支持的响应格式列表,最终返回结果会根据这 2 个类型列表,找到一种两边都能够支持的类型返回,如果找不到合适...List getSupportedMediaTypes(); 这个方法会返回当前转换器能够支持的媒体类型,表示这个转换器能能够将内容转换为这些媒体类型格式的数据然后响应到客户端,...方式 3 中会涉及到内容的协商,过程大致如下 step1:获取客户端能够接收的媒体类型列表:由请求头 Accpet 解析得到 step2:获取服务器端能够响应的媒体类型列表:遍历所有 HttpMessageConverter
理解和使用内容协商 我们的开发者在发送一个 REST API 请求的同时,根据应用场景,针对相同的资源,可能会期待不同的返回形式。 比如,我希望根据用户客户端语言,同一个资源的内容可以返回不同的语言。...因此,我们在设计 REST API 的时候,应该提供完备的内容协商能力。 使用 URL 参数进行内容协商 最容易想到的自然是通过 URL 参数进行控制,我们经常看到形如 / 航班号 /entry?...使用 URI 模式进行内容协商 还有一种模式,就是将协商设置直接作为 URI 的一部分,将不同的返回视为不同的资源,比如 / 航班号 /json 来返回 JSON 格式的结果,用 / 航班号 /atom...回页首 正确的使用 HTTP 响应代码 作为 API 的设计者,正确的将 API 执行结果和失败原因用清晰简洁的方式传达给客户程序是十分关键的一步。...404 未找到 , 服务器找不到请求的网页。 405 方法禁用 , 禁用请求中所指定的方法。 406 不接受 , 无法使用请求的内容特性来响应请求的网页。
name=User 这是以个 REST风格的URL,它处理 /greeting 这样的资源,接受一个 name=User 这样的参数。...在这个 GreetingController 类上使用了 @RestController 注解 ,它指示了 这个类是一个 Rest风格 的 控制器类(Controller)。...方法的返回值 方法的返回值创建一个 具有id和content 字段的新对象 Greeting ,借助Spring的HTTP消息转换器支持,内置的 Jackson 库会将这个对象转换成 JSON 字符串写入到...它添加了以下所有内容: @Configuration: 将类标记为应用程序上下文的Bean定义的源。.../mvnw spring-boot:run 4.
CallAdapterFactory实现: BodyCallAdapterFactory 默认启用,可通过配置retrofit.enable-body-call-adapter=false关闭 同步执行http请求,将响应体内容适配成接口方法的返回值类型实例...如果方法的返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应的CallAdapterFactory执行适配处理!...加上Retrofit默认的CallAdapterFactory,可支持多种形式的方法返回值类型: Call: 不执行适配处理,直接返回Call对象 CompletableFuture:...Response: 将响应内容适配成Response对象返回 其他任意Java类型:将响应体内容适配成一个对应的Java类型对象返回,如果http状态码不是2xx,直接抛错! ... * 将响应体内容适配成一个对应的Java类型对象返回,如果http状态码不是2xx,直接抛错!
如果找不到,则会查找index模板。如果找到任何一个,它将自动用作应用程序的欢迎页面。...路径匹配和内容协商 Spring MVC可以通过查看请求路径并将它匹配到应用程序中定义的映射(例如@GetMapping Controller方法上的注释),将传入的HTTP请求映射到处理程序。...如今,内容协商更可靠。 还有其他一些方法可以处理不一致地发送适当的“接受”请求标头的HTTP客户端。我们可以使用查询参数来确保类似的请求"GET /projects/spring-boot?...模板引擎 正如REST web服务,你也可以使用Spring MVC提供动态HTML内容。...为了完全替换默认的行为,你可以实现ErrorController,并注册一个该类型的bean定义,或简单地添加一个ErrorAttributes类型的bean以使用现存的机制,只是替换显示的内容。
(强大的ORM框架)、upload(本地文件上传和七牛云文件上传)、redis(缓存)、ehcache(缓存)、email(发送各种类型邮件)、task(基础定时任务)、quartz(动态管理定时任务)...RELEASE,每个 Module 均依赖 spring-boot-demo-parent,有挺多同学们反映这种方式对新手不是很友好,运行起来有些难度,因此 此分支(v-1.5.x)会停止开发维护 ,所有内容会慢慢以...的 pom.xml 文件 Maven Projects 找不到的童鞋,可以勾上 IDEA 顶部工具栏的 View -> Tool Buttons ,然后 Maven Projects 的面板就会出现在...helloworld demo-properties spring-boot 读取配置文件中的内容 demo-actuator spring-boot 集成 spring-boot-starter-actuator...使用 Redis + Lua 脚本实现分布式限流,保护 API demo-https spring-boot 集成 HTTPS demo-elasticsearch-rest-high-level-client
默认这里响应头为空,为空的话则需要进行内容协商(即寻找最佳媒体类型) 内容协商:(大致原理,详解在第二小节) ①确定浏览器可接收的媒体类型:getAcceptableMediaType().浏览器会以请求头或携带参数的方式告诉服务器他能接受什么样的内容类型...3.2内容协商 经过3.1小结的学习,相信大家也发现,内容协商是数据响应过程中的核心环节,它直接决定了数据响应的结果使用何种格式(媒体类型)。...下面我们来详细解析一下其原理: 首先需要明确,如果在进行内容协商前响应头中已经有指定的媒体类型则不会进行内容协商。...原理解析: 内容协商的第一步就是获取浏览器可接收的媒体类型。如何获取?...由于默认使用的基于请求头策略是由浏览器q值决定浏览器期望媒体类型的,而在实际项目开发中,为了方便内容协商,我们可以使用请求参数来决定客户端优先接收的内容类型,需要开启基于请求参数的内容协商功能。
CallAdapterFactory实现: BodyCallAdapterFactory 默认启用,可通过配置retrofit.enable-body-call-adapter=false关闭 同步执行http请求,将响应体内容适配成接口方法的返回值类型实例...如果方法的返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应的**CallAdapterFactory执行适配处理!...加上Retrofit默认的CallAdapterFactory,可支持多种形式的方法返回值类型:** Call: 不执行适配处理,直接返回Call对象 CompletableFuture: 将响应内容适配成Response对象返回 其他任意Java类型:将响应体内容适配成一个对应的Java类型对象返回,如果http状态码不是2xx,直接抛错!...* 将响应体内容适配成一个对应的Java类型对象返回,如果http状态码不是2xx,直接抛错!
CallAdapterFactory实现: BodyCallAdapterFactory 默认启用,可通过配置retrofit.enable-body-call-adapter=false关闭 同步执行http请求,将响应体内容适配成接口方法的返回值类型实例...如果方法的返回值类型为Retrofit.Response,则可以使用该适配器。 Retrofit自动根据方法返回值类型选用对应的CallAdapterFactory执行适配处理!...加上Retrofit默认的CallAdapterFactory,可支持多种形式的方法返回值类型: Call: 不执行适配处理,直接返回Call对象 CompletableFuture:...Response: 将响应内容适配成Response对象返回 其他任意Java类型:将响应体内容适配成一个对应的Java类型对象返回,如果http状态码不是2xx,直接抛错!...* 将响应体内容适配成一个对应的Java类型对象返回,如果http状态码不是2xx,直接抛错!
因为内容协商不仅仅可以使用在HttpMessage上,还可以使用在View视图上,这也就是本文想重点补充的内容。 内容协商在HttpMessage上的应用 前两篇文章的示例都是基于此。...或者返回值直接是HttpEntity/ResponseEntity类型(也就是不能是RequestEntity就成) 毫无疑问,基于@ResponseBody的Rest接口方式在前后端完全分离的今天已然是主流方式...里也使用到了,因此我自然而然的联想到了内容协商也能结合视图解析器一起使用~ 内容协商在视图View上的应用 由于前面我给的示例都是基于Http消息的,没有视图可言。...本文此处需要讲解的是内容协商在视图解析方面的应用:同一个URL,以不同的视图作为展示方式。...ContentNegotiationManager来处理内容协商的。
第四类:基于ContentType消息转换器类型 利用HttpMessageConverter将输入流转换成对应的参数 这类参数解析器的基类是AbstractMessageConverterMethodArgumentResolver...AbstractMessageConverterMethodProcessor源码稍显复杂,它和Http协议、内容协商有很大的关联: // @since 3.1 public abstract class...() this.pathStrategy = initPathStrategy(this.contentNegotiationManager); // 用safeExtensions装上内容协商所支持的所有后缀...此抽象类里,它完成了内容协商~ 关于内容协商的详解,强烈建议你点击 这里 。...总结 本文介绍的处理内容,其实还是比较重要的,因为它和消息转换器HttpMessageConverter有关,毕竟它是我们目前主流的使用方式,希望可以帮助到大家理解。
领取专属 10元无门槛券
手把手带您无忧上云