当前位置: 首页 > wzjs >正文

那个网站可以做网站测速对比网站服务器容器

那个网站可以做网站测速对比,网站服务器容器,wordpress 子主题路由,网站首页 选择入口 设计一、HttpMessageConverter HttpMessageConverter是Spring MVC中非常重要的一个接口。翻译为:HTTP消息转换器。该接口下提供了很多实现类,不同的实现类有不同的转换方式。 1.什么是HTTP消息 HTTP消息其实就是HTTP协议。HTTP协议包括请求协议和响应协议。…

一、HttpMessageConverter

HttpMessageConverter是Spring MVC中非常重要的一个接口。翻译为:HTTP消息转换器。该接口下提供了很多实现类,不同的实现类有不同的转换方式。

image.png

1.什么是HTTP消息

HTTP消息其实就是HTTP协议。HTTP协议包括请求协议和响应协议。

以下是一份HTTP POST请求协议:

以下是一份HTTP GET请求协议:

以下是一份HTTP响应协议:

2.转换器转换的是什么

转换的是HTTP协议Java程序中的对象之间的互相转换。请看下图:

上图是我们之前经常写的代码。请求体中的数据是如何转换成user对象的,底层实际上使用了HttpMessageConverter接口的其中一个实现类FormHttpMessageConverter。 通过上图可以看出FormHttpMessageConverter是负责将请求协议转换为Java对象的。

再看下图:

上图的代码也是之前我们经常写的,Controller返回值看做逻辑视图名称,视图解析器将其转换成物理视图名称,生成视图对象,StringHttpMessageConverter负责将视图对象中的HTML字符串写入到HTTP协议的响应体中。最终完成响应。

通过上图可以看出StringHttpMessageConverter是负责将Java对象转换为响应协议的。


通过以上内容的学习,大家应该能够了解到HttpMessageConverter接口是用来做什么的了:

无标题.png

如上图所示:HttpMessageConverter接口的可以将请求协议转换成Java对象,也可以把Java对象转换为响应协议。

HttpMessageConverter是接口,SpringMVC帮我们提供了非常多而丰富的实现类。每个实现类都有自己不同的转换风格。

对于我们程序员来说,Spring MVC已经帮助我们写好了,我们只需要在不同的业务场景下,选择合适的HTTP消息转换器即可。

怎么选择呢?当然是通过SpringMVC为我们提供的注解,我们通过使用不同的注解来启用不同的消息转换器。

在HTTP消息转换器这一小节,我们重点要掌握的是两个注解两个类:

  • @ResponseBody

  • @RequestBody

  • ResponseEntity

  • RequestEntity

二、Spring MVC中的AJAX请求

SpringMVC+Vue3+Thymeleaf+Axios发送一个简单的AJAX请求。

引入Vue和Axios的js文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--组件扫描--><context:component-scan base-package="org.example1.controller"/><!--视图解析器--><bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver"><property name="characterEncoding" value="UTF-8"/><property name="order" value="1"/><property name="templateEngine"><bean class="org.thymeleaf.spring6.SpringTemplateEngine"><property name="templateResolver"><bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver"><property name="prefix" value="/WEB-INF/thymeleaf/"/><property name="suffix" value=".html"/><property name="templateMode" value="HTML"/><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property></bean><!--开启注解驱动--><mvc:annotation-driven/><!--视图控制器--><mvc:view-controller path="/" view-name="index"/><!--静态资源处理,开启默认的Servlet--><mvc:default-servlet-handler/>
</beans>

重点是静态资源处理、开启注解驱动、视图控制器映射等相关配置。


Vue3+Thymeleaf+Axios发送AJAX请求:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>首页</title><!--引入vue--><script th:src="@{/static/js/vue3.4.21.js}"></script><!--引入axios--><script th:src="@{/static/js/axios.min.js}"></script>
</head>
<body>
<h1>使用Vue3 + axios + Thymeleaf + SpringMVC发送AJAX请求</h1>
<hr><div id="app"><button @click="getMessage">获取消息</button><h1>{{message}}</h1>
</div><script th:inline="javascript">Vue.createApp({data(){return {message : '这里消息将被刷新'}},methods : {// 异步方法(ajax请求多数情况下都是异步请求)async getMessage(){// 发送ajax请求let response = await axios.get([[@{/}]] + 'ajax')// 将返回的数据交给messagethis.message = response.data}}}).mount("#app")</script>
</body>
</html>

重点来了,Controller怎么写呢,之前我们都是传统的请求,Controller返回一个**逻辑视图名**,然后交给**视图解析器**解析。最后跳转页面。而AJAX请求是不需要跳转页面的,因为AJAX是页面局部刷新,以前我们在Servlet中使用**response.getWriter().print("message")**的方式响应。在Spring MVC中怎么办呢?当然,我们在Spring MVC中也可以使用Servlet原生API来完成这个功能,代码如下:

启动服务器测试:http://localhost:8080/springmvc/


难道我们以后AJAX请求都要使用原生Servlet API吗?

  • 不需要,我们可以使用SpringMVC中提供的HttpMessageConverter消息转换器。

我们要向前端响应一个字符串"hello",这个"hello"就是响应协议中的响应体。

我们可以使用 @ResponseBody 注解来启用对应的消息转换器。而这种消息转换器只负责将Controller返回的信息以响应体的形式写入响应协议。

三、@ResponseBody

1.StringHttpMessageConverter

上面的AJAX案例,Controller的代码可以修改为:

测试:


最核心需要理解的位置是:return "hello ajax, my name is Spring MVC!";

这里的"hello ajax, my name is Spring MVC!"不是逻辑视图名了,而是作为响应体的内容进行响应。直接输出到浏览器客户端。 以上程序中使用的消息转换器是:StringHttpMessageConverter,为什么会启用这个消息转换器呢?因为你添加@ResponseBody这个注解。

通常AJAX请求需要服务器给返回一段JSON格式的字符串,可以返回JSON格式的字符串吗?当然可以,代码如下:

测试:


这是完全可以的,此时底层使用的消息转换器还是:StringHttpMessageConverter

那如果在程序中是一个POJO对象,怎么将POJO对象以JSON格式的字符串响应给浏览器呢?两种方式:

  • 第一种方式:自己写代码将POJO对象转换成JSON格式的字符串,用上面的方式直接return即可。

  • 第二种方式:启用MappingJackson2HttpMessageConverter消息转换器。

2.MappingJackson2HttpMessageConverter

启用MappingJackson2HttpMessageConverter消息转换器的步骤如下:

第一步:引入jackson依赖,可以将java对象转换为json格式字符串

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.17.0</version>
</dependency>

第二步:开启注解驱动 这一步非常关键,开启注解驱动后,在HandlerAdapter中会自动装配一个消息转换器:MappingJackson2HttpMessageConverter

<mvc:annotation-driven/>

第三步:准备一个POJO

package org.example1.bean;public class User {private Long id;private String name;private String password;@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +'}';}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public User() {}public User(Long id, String name, String password) {this.id = id;this.name = name;this.password = password;}
}

第四步:控制器方法使用 @ResponseBody 注解标注(非常重要),控制器方法返回这个POJO对象

测试:

以上代码底层启用的就是 MappingJackson2HttpMessageConverter 消息转换器。

他的功能很强大,可以将POJO对象转换成JSON格式的字符串,响应给前端。

其实这个消息转换器MappingJackson2HttpMessageConverter本质上只是比StringHttpMessageConverter多了一个json字符串的转换,其他的还是一样。

四、@RestController

因为我们现代的开发方式都是基于AJAX方式的,因此 @ResponseBody 注解非常重要,很常用。

为了方便,Spring MVC中提供了一个注解 @RestController。这一个注解代表了:@Controller + @ResponseBody。

@RestController 标注在类上即可。被它标注的Controller中所有的方法上都会自动标注 @ResponseBody

@RestController
public class AJAXController {@GetMapping("/ajax")//@ResponseBodypublic User ajax() {User user = new User(111222L, "lisi", "123");return user;}
}

五、@RequestBody


其核心作用如下:

  1. 读取请求体数据并解析绑定
    利用系统默认的 HttpMessageConverter 解析请求体(如 HTTP 请求的 body 部分),将数据转换后绑定到控制器方法的参数上。例如,前端发送包含 JSON 数据的请求体,@RequestBody 可将其解析并映射到对应的 Java 对象,方便后续业务逻辑处理。

  2. 处理非默认编码格式
    常用于处理 content-type 非 application/x-www-form-urlencoded 的内容,如 application/jsonapplication/xml 等。最典型的是解析 JSON 数据,将其自动转换为 Java 对象(需确保项目引入 JSON 处理依赖,如 Jackson)。例如:

@PostMapping("/user")  
public String createUser(@RequestBody User user) {  // 处理用户对象  return "success";  
}  

此时,前端发送的 JSON 数据(如 {"name":"张三","age":20})会被解析并赋值给 User 对象的对应属性。


1.FormHttpMessageConverter

这个注解的作用是直接将请求体传递给Java程序,在Java程序中可以直接使用一个String类型的变量接收这个请求体的内容。

在没有使用这个注解的时候:

@RequestMapping("/save")
public String save(User user){// 执行保存的业务逻辑userDao.save(user);// 保存成功跳转到成功页面return "success";
}

当请求体提交的数据是:

username=zhangsan&password=1234&email=zhangsan@powernode.com

那么Spring MVC会自动使用 FormHttpMessageConverter消息转换器,将请求体转换成user对象。


当使用这个注解的时候:这个注解只能出现在方法的参数上。

@RequestMapping("/save")
public String save(@RequestBody String requestBodyStr){System.out.println("请求体:" + requestBodyStr);return "success";
}

Spring MVC仍然会使用 FormHttpMessageConverter消息转换器,将请求体直接以字符串形式传递给 requestBodyStr 变量。 测试输出结果:

2.MappingJackson2HttpMessageConverter

另外,如果在请求体中提交的是一个JSON格式的字符串,这个JSON字符串传递给Spring MVC之后,能不能将JSON字符串转换成POJO对象呢?答案是可以的。 此时必须使用@RequestBody 注解来完成 。并且底层使用的消息转换器是:MappingJackson2HttpMessageConverter。实现步骤如下:

  • 第一步:引入jackson依赖

  • 第二步:开启注解驱动

  • 第三步:创建POJO类,将POJO类作为控制器方法的参数,并使用 @RequestBody 注解标注该参数

  • 第四步:在请求体中提交json格式的数据

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>首页</title><!--引入vue--><script th:src="@{/static/js/vue3.4.21.js}"></script><!--引入axios--><script th:src="@{/static/js/axios.min.js}"></script>
</head>
<body>
<h1>使用Vue3 + axios + Thymeleaf + SpringMVC发送AJAX请求</h1>
<hr>
<form th:action="@{/save}" method="post">用户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br><input type="submit" value="保存">
</form><hr><div id="app"><button @click="getMessage">获取消息</button><h1>{{message}}</h1>
</div><script th:inline="javascript">// 发送ajax post请求,并且在请求体当中提交json数据let jsonObj = {"name" : "zhangsan", "password" : "1234"}Vue.createApp({data(){return {message : ''}},methods : {async getMessage(){let response = await axios.post([[@{/}]] + 'save2', JSON.stringify(jsonObj), {headers : {"Content-Type" : "application/json"}})// 将返回的数据交给messagethis.message = response.data}}}).mount("#app")</script>
</body>
</html>

测试结果:


六、RequestEntity

RequestEntity不是一个注解,是一个普通的类。这个类的实例封装了整个请求协议:包括请求行、请求头、请求体所有信息。 出现在控制器方法的参数上:

测试结果:

在实际的开发中,如果你需要获取更详细的请求协议中的信息。可以使用RequestEntity

七、ResponseEntity

ResponseEntity不是注解,是一个类。用该类的实例可以封装响应协议,包括:状态行、响应头、响应体。

也就是说:如果你想定制属于自己的响应协议,可以使用该类。

假如我要完成这样一个需求:前端提交一个id,后端根据id进行查询,如果返回null,请在前端显示404错误。如果返回不是null,则输出返回的user。

service

超链接

测试


文章转载自:

http://nJm0P4sN.mqbsm.cn
http://dAdRLqVI.mqbsm.cn
http://LOzYV2xm.mqbsm.cn
http://lvYX9jl7.mqbsm.cn
http://G4VhpmRk.mqbsm.cn
http://SxgaMtXm.mqbsm.cn
http://lTYJJg08.mqbsm.cn
http://YRjxElGX.mqbsm.cn
http://0b5tb53w.mqbsm.cn
http://9odRVODA.mqbsm.cn
http://w1RiHJfd.mqbsm.cn
http://GUxX5t6m.mqbsm.cn
http://k1lr7Db0.mqbsm.cn
http://NUUQQkJD.mqbsm.cn
http://l65xHFTC.mqbsm.cn
http://kCN8I4nA.mqbsm.cn
http://z87alhWH.mqbsm.cn
http://bRkk1Lxq.mqbsm.cn
http://uKF0YxQD.mqbsm.cn
http://SN0mpmNo.mqbsm.cn
http://JuiLJXJn.mqbsm.cn
http://QnRGKf7H.mqbsm.cn
http://RAqwvdT5.mqbsm.cn
http://HHZxesxn.mqbsm.cn
http://4BdMQWNx.mqbsm.cn
http://9b9iLyYj.mqbsm.cn
http://QLNp7P7v.mqbsm.cn
http://BssQCYOF.mqbsm.cn
http://JBrsmthu.mqbsm.cn
http://TDSf3582.mqbsm.cn
http://www.dtcms.com/wzjs/708584.html

相关文章:

  • 商业网站开发金昌市建设工程质量监督站网站
  • 酒店网站建设方案网站空间升级通知
  • 四川网站设计首选柚米科技苏州公司网站设计
  • 色彩 导航网站微营销
  • 如何用ps做网站设计图收企业做网站备案
  • 有没有做网站的电话phpstudy安装wordpress
  • 沈阳网站建设那家好成都的设计院
  • 上海网站定制价格低建立公司网站需要注意什么
  • 企业网站倾向于wordpress陕西大型网站建设
  • 宁波外贸建站公司网站代运营性价比高
  • 互联网网站建设方案湖南网站建设 干净磐石网络
  • 安装vs2015网站开发嵌入式软件开发职业规划
  • 有动态图片的网站源码百度在西安有分公司吗
  • 做网站可以找设计公司吗包装设计公司报价
  • 余姚有专业做网站的吗金湖网站建设公司
  • 网站推广的案例wordpress查询码
  • 西安网站优化指导wordpress调用python
  • 长沙建设企业网站苏州企业网站建站
  • 社交网站 建站知名vi设计企业
  • 北京asp网站设计制作小程序开发费用是多少
  • 阿里云从哪里建设网站合肥有哪些做网站的公司
  • 网站制作首先教育培训学校
  • 如何做视频解析网站可以做我女朋友吗网站
  • 网站策划和运营老闵行租房
  • 好的建站平台手机优化网站建设
  • 吐鲁番app开发定制网站seo诊断优化方案
  • 成都建设网站设计网站搜索排名
  • 如何建设自己的网站 知乎免费做简易网站
  • 网站批量上传服务器域名买卖
  • 柳南网站建设汕头网站推广费用