概述@ResponseBody是一个Spring MVC注解,用于指示方法的返回值应该被直接写入HTTP响应体。这通常用于处理返回非HTML内容的请求,如JSON或XML。...错误处理:需要适当的错误处理机制来应对找不到资源或数据转换错误的情况。测试用例在实际开发中,可以通过以下方式测试这段代码:启动应用程序:运行Spring Boot应用程序。...直观性:通过注解直接指定方法的返回值应写入响应体,提高了代码的可读性。缺点:限制性:仅适用于返回单个对象或集合,对于需要返回复杂视图的情况可能不够灵活。...它通过提供一种简洁的方式来映射方法返回值到响应体,极大地简化了Web应用程序的开发。开发者在使用时需要注意数据格式的匹配和错误处理,以确保应用程序的健壮性和用户体验。...随着技术的不断发展和RESTful架构的广泛应用,掌握这些工具和方法对于构建现代Web应用程序至关重要。...
HttpMessageConverter 是 spring-web 中对于 HTTP 请求和响应的 body 进行编码解码的工具。...其接口结构是: public interface HttpMessageConverter { //判断 clazz 类型是否可以被当前 HttpMessageConverter 所读取...(); //通过 clazz 类型获取该 HttpMessageConverter 支持的 MediaType //默认实现是,如果该类型可以被当前 HttpMessageConverter...getSupportedMediaTypes() : Collections.emptyList()); } //从 inputMessage 中读取并解析出 clazz 类型的对象,当请求的...RestTemplate 的响应兼容,RestTemplate 可以返回 HttpEntity,但是底层 HTTP 请求返回的 body 其实并没有包装这个类型。
图片 4 @RequestBody 作用:@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json...;defaultValue:默认值,表示如果请求中没有同名参数时的默认值 图片 形参名称时items_id,但是这里使用的是value=”id”,限定请求的参数名是id 7 @Validated和...BindingResult 注意:添加@Validated表示在对items参数绑定时进行校验,校验信息写入BindingResult中,在要校验的pojo后边添加BingdingResult, 一个BindingResult...在controller中定义商品类型查询方法,最终将商品类型传到页面。...请求内有效(只适用于web应用) session表示在一个用户会话内有效(只适用于web应用) globalSession表示在全局会话内有效(只适用于web应用) 12 @RestController
[3]type属性 @SessionAttributes(types=User.class) 从请求域中读取一个类型为User的对象保存到Session域中。...②隐患 使用@SessionAttributes注解会在下述情况中引发异常 [1]情景描述 handler方法的入参的类型是User,类名首字母小写后正好是@SessionAttributes注解中指定的...7.当PUT和DELETE请求遇到Tomcat8 Restful风格(Delete请求和PUT请求)在高版本Tomcat中无法转发到JSP页面,解决办法是在JSP页面上设置isErrorPage=“true...是SpringMVC专门提供的做消息转换的工具接口。 如下图所示,请求的报文(请求的HTTP协议内容)会被封装成为HttpInputMessage实现类。...然后,我们SpringMVC程序的返回数据,交给HttpMessageConverter转换成为HttpOutputMessage实现类,最终输出成为响应报文(响应的Http协议) 11.异常映射
28.1.1 Spring MVC自动配置 Spring Boot为Spring MVC提供了自动配置,适用于大多数应用程序。...28.1.6欢迎页面 Spring Boot支持静态和模板化的欢迎页面。它首先在配置的静态内容位置中查找 index.html 文件。如果找不到,则会查找 index 模板。...如果 找到任何一个,它将自动用作应用程序的欢迎页面。 28.1.7自定义Favicon Spring Boot在配置的静态内容位置和类路径的根(按此顺序)中查找 favicon.ico 。...28.1.8路径匹配和内容协商 Spring MVC可以通过查看请求路径并将其与应用程序中定义的映射相匹配(例如,关于Controller方法的 @GetMapping 注释),将传入的 HTTP请求映射到处理程序...这被认为是Spring MVC应用程序的 最佳实践。对于没有发送正确“接受”请求标头 的HTTP客户端,此功能在过去主要有用; 我们需要确保将正确的内容类型发送给客户端。如今,内容协商更加可靠。
233 Q: #16.2-3 | 借助Content-NegotiationManager我们所能做到的事情如下所示 A: 指定默认的内容类型,如果根据请求无法得到内容类型的话,将会使用默认值; 通过请求参数指定内容类型...; 忽视请求的Accept头部信息; 将请求的扩展名映射为特定的媒体类型; 将JAF(Java Activation Framework)作为根据扩展名查找媒体类型的备用方案。...(text/xml或application/xml)和使用JAXB2注解的对象间互相读取和写入。...如果 JAXB v2 库在类路径下,将进行注册; MappingJacksonHttpMessageConverter --- 在JSON和类型化的对象或非类型化的HashMap间互相读取和写入。...如果 Jackson JSON 库在类路径下,将进行注册; MappingJackson2HttpMessageConverter --- 在JSON和类型化的对象或非类型化的HashMap间互相读取和写入
~~~ 还是一样的 优先以GenericHttpMessageConverter这种类型的转换器为准 for (HttpMessageConverter的 它还有一个很不错的应用场景:就是对请求、返回数据进行加密、解密 基于RequestBodyAdvice和ResponseBodyAdvice...还有就是这种下载方式因为是一次性全部输出,所以无法统计已下载量、未下载量等扩展功能,所以也就不能实现断点续传 **传统Java通用实现在功能上能够更加的丰富:**对下载文件的大小无限制((循环读取一定量的字节写入到输出流中...因为是这种实现方式是基于循环写入的方式进行下载,在每次将字节块写入到输出流中的时都会进行输出流的合法性检测,在因为用户取消或者网络原因造成socket断开的时候,系统会抛出SocketWriteException...的文件,里面内容为你的异常信息(或者body内容信息),简直一脸懵逼有木有 其实这个现象上面已经提到过了原因,但是一笔带过没有详细解释。
类型的值超过9007199254740991,就有可能产生精度丢失,从而导致数据和逻辑出错。...接口提供了 5 个方法: canRead:判断该转换器是否能将请求内容转换成 Java 对象 canWrite:判断该转换器是否可以将 Java 对象转换成返回内容 getSupportedMediaTypes...:获得该转换器支持的 MediaType 类型 read:读取请求内容并转换成 Java 对象 write:将 Java 对象转换后写入返回内容 其中read和write方法的参数分别有有HttpInputMessage...和HttpOutputMessage对象,这两个对象分别代表着一次 Http 通讯中的请求和响应部分,可以通过getBody方法获得对应的输入流和输出流。...(CustomMappingJackson2HttpMessageConverter.class); /** * 判断该转换器是否能将请求内容转换成 Java 对象 */
401 未授权 && 请求没有进行身份验证或验证未通过。 403(Forbidden) 禁止 && 服务器拒绝此次请求。 404(Not Found) 未找到 && 服务器找不到请求的网页。...405 方法禁用 && 服务器禁用了请求中指定的方法。 406 不接受 && 无法使用请求的内容响应请求的网页。 407 需要代理授权 && 请求者需要使用代理授权。...413 请求实体过大 && 请求实体过大,超出服务器的处理能力。 414 请求的URL过长 && 请求网址过长,服务器无法处理。 415 不支持类型 && 请求的格式不被请求页面支持。...416 请求范围不符合要求 && 页面无法提供请求的范围。 417 未满足期望值 && 服务器未满足期望请求标头字段的要求。 500 服务器内部错误 && 服务器遇到错误,无法完成请求。...--开启springmvc注解驱动,对@ResponseBody的注解进行格式增强,追加其类型转换的功能,具体实现由MappingJackson2HttpMessageConverter进行--> <mvc
3.1、这是由类容协商决定的 服务器端和请求端协商决定最终返回什么格式的内容。...客户端发送请求的时候可以告知服务器端,自己希望对方返回的数据格式列表,而服务器端的接口也有自己能够支持的响应格式列表,最终返回结果会根据这 2 个类型列表,找到一种两边都能够支持的类型返回,如果找不到合适...比如:服务器端可以响应 json 和 xml 格式的数据,而浏览器发送请求的时候告诉服务器说:我能够接收 html 和 json 格式的数据,那么最终会返回二者都能够支持的类型:json 格式的数据。...5.1、解释 简单点理解,媒体类型就是用来表示内容的格式,比如可以用来表示 http 请求体和响应体内容的格式。...方式 3 中会涉及到内容的协商,过程大致如下 step1:获取客户端能够接收的媒体类型列表:由请求头 Accpet 解析得到 step2:获取服务器端能够响应的媒体类型列表:遍历所有 HttpMessageConverter
如果我要在url参数上传递一个日期数据,我们是无法在后端通过声明一个Date类型的参数来接收的,会报空指针错误。想要接收日期数据,就得用到SpringMVC中的数据类型转换器了。...date=2018-03-28,输出结果如下: Mon Jan 02 00:00:00 CST 2018 通过实现Formatter接口来实现类型的转换有一个缺点就是无法自定义来源类型,Formatter...它们分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制,就是HttpMessageConverter的应用,通过不同的HttpMessageConverter实现类就可以进行不同类型的转换...这也是抽象了HttpMessageConverter接口的好处,可以在不同类型的数据间进行转换。...实现类来将请求参数解析到string变量中,具体来说是使用了StringHttpMessageConverter类,它的canRead()方法返回true,然后它的read()方法会从请求中读出请求参数
官方解释.RequestResponseBodyProcessor能够解析用@RequestBody注解的参数和通过使用HttpMessageConverter读取并写入请求体或响应来处理用@ResponseBody...} return; } 排序、for循环compatiableMediaTypes,通过isConcrete()判断消息格式是否具体(类型和子类型是否为通配符...()写入响应头和消息内容 /** * This implementation sets the default headers by calling {@link #addDefaultHeaders...()写入响应头和消息内容 @Override public final void write(final T t, MediaType contentType, HttpOutputMessage...尾言 等休息的时候,再写Spring MVC源码分析请求响应流程,源码分析RequestMappingHandlerMapping和RequestMappingHandlerAdapter。
前言 本文介绍Spring MVC中的一个极其重要的组件:HttpMessageConverter消息转换器。 有一副非常著名的图,来形容Spring MVC对一个请求的处理: ?...它对请求、响应都起到了非常关键的作用~ 为何需要消息转换器 HttpMessageConverter是用来处理request和response里的数据的。....既然它是HttpMessageConverter,所以铁定和HttpMessage有关,因为此接口涉及的内容相对来说比较偏底层,因此本文只在接口层面做简要的一个说明。...后面会是重磅内容~ ---- HttpMessageConverter接口是Spring3.0之后新增的一个接口,它负责将请求信息转换为一个对象(类型为T),并将对象(类型为T)绑定到请求方法的参数中或输出为响应信息...因此本文讲述的消息转换器HttpMessageConverter就是专门来实现请求体/响应体到Java对象之间的转换的,具有非常重要的意义
params:根据HTTP参数的存在、缺省或值对请求进行过滤header:根据HTTP Header的存在、缺省或值对请求进行过滤consume:设定在HTTP请求正文中允许使用的媒体类型product...String handleMediaTypeRequest() { // 处理特定媒体类型的请求的逻辑 return "viewName";}通过 consumes 属性可以指定接受的请求的媒体类型...Spring Boot会根据特定的依赖项和注解的存在自动启用与Web相关的配置。在 MyWebConfig 中可以配置许多与 Spring MVC 和 Web 应用程序相关的内容。...Spring MVC 会按照配置的消息转换器的顺序尝试将请求和响应的内容转换为适当的数据格式。...国际化和本地化(Internationalization and Localization):配置应用程序的国际化和本地化支持,以便根据用户的地区和语言提供不同的内容。
1、使用HttpMessageConvter可以将请求信息转换并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息。...spring提供了两种途径: @RequestBody和@ResponseBody对方法进行标注 HttpEntity和ResponseEntity作为处理方法的入参返回值 2、当控制器方法使用到...@RequestBody和@ResponseBody或HttpEntity和ResponseEntity时,spring首先根据请求头或响应头的Accept属性匹配到HttpMessageConverter...,进而根据参数类型或泛型类型的过滤得到匹配的HttpMessageConverter,若找不到可用的HttpMessageConverter将报错。...一、可以使用@RequestBody和@ResponseBody来将表单转成String类型,注意这种是不能进行文件上传的。
如果找不到,则会查找index模板。如果找到任何一个,它将自动用作应用程序的欢迎页面。...、 自定义Favicon Spring Boot favicon.ico在配置的静态内容位置和类路径的根目录(按此顺序)中查找a 。如果存在这样的文件,它会自动用作应用程序的图标。...路径匹配和内容协商 Spring MVC可以通过查看请求路径并将它匹配到应用程序中定义的映射(例如@GetMapping Controller方法上的注释),将传入的HTTP请求映射到处理程序。...这被认为是Spring MVC应用程序的 最佳实践。此功能在过去对于没有发送正确的“Accept”请求标头的HTTP客户端来说非常有用; 我们需要确保将正确的内容类型发送到客户端。...为了完全替换默认的行为,你可以实现ErrorController,并注册一个该类型的bean定义,或简单地添加一个ErrorAttributes类型的bean以使用现存的机制,只是替换显示的内容。
(key,value) addRequestProperty(key,value) setRequestProperty和addRequestProperty的区别就是,setRequestProperty...,如果成功既可以读取响应中的数据,获取这些数据的方法包括: getContent getHeaderField getInputStream 对于大部分请求来说,getInputStream和getContent... httpUrlConnection.setUseCaches(false); // 设定传送的内容类型是可序列化的java对象 // (如果不设此项,在传送序列化对象时,当WEB.../x-java-serialized-object"); // 连接,从上述url.openConnection()至此的配置必须要在connect之前完成, httpUrlConnection.connect...此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, // 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 objOutputStm.close
@ResponseBody的使用 由于@ResponseBody和@RequestBody的内部实现是同样的原理(封装请求和封装响应),所以本文以@ResponseBody为主要入手点,理解清楚任何一者...详解ContentType与consumes 恰恰和Accpect&produces相反,这两个参数是与用于限制请求的。理解了前两者的含义,这两个参数可以举一反三理解清楚。...consumes是Spring为我们提供的注解参数,代表着服务端能够支持处理的请求媒体类型,同样是一个数组,意味着服务端支持多种媒体类型的请求。...详解HttpMessageConverter 我们想要搞懂Spring到底如何完成众多实体类等复杂类型的数据转换以及与媒体类型的对应,就必须要搞懂HttpMessageConverter这个顶级接口:...下面的流程图可以更好方便我们的理解: ? 对于添加了@RequestBody和@ResponseBody注解的后端端点,都会经历由HttpMessageConverter进行的数据转换的过程。
它使用特定的注释来配置和定义应用程序的行为,而不需要显式编写大量的配置代码。...如果在应用程序中有更具体的组件类型,如数据访问组件(@Repository),服务组件(@Service),控制器组件(@Controller)等,推荐使用更加具体的注释以更好表达其用途和语义。...配置类在应用程序中扮演着重要的角色,用于定义和组织应用程序的一些配置。它作为 Bean 的载体。...值,才能让该方法处理请求 Value: 指定请求的实际地址,指定的地址可以是 URI Template 模式 Method: 指定请求的 method 类型,如 GET, POST, PUT, DELETE...等 Consumes: 指定处理请求的提交内容类型 Content-Type,比如 "application/json, text/html" Produces: 指定返回的内容类型。
领取专属 10元无门槛券
手把手带您无忧上云