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

springMVC之HttpMessageConverter

文章目录

  • 前言
  • 一、@RequestBody
  • 二、RequestEntity
  • 三、@ResponseBody
  • 四、SpringMVC处理json
  • 五、SpringMVC处理ajax
  • 六、@RestController注解
  • 七、ResponseEntity
  • 总结


前言

HttpMessageConverter,报文信息转换器,将请求报文转换为Java对象,或将Java对象转换为响应报文HttpMessageConverter提供了两个注解和两个类型:@RequestBody,@ResponseBody,RequestEntity,ResponseEntity。


一、@RequestBody

@RequestBody可以获取请求体,需要在控制器方法设置一个形参,使用@RequestBody进行标识,当前请求的请求体就会为当前注解所标识的形参赋值。

<form th:action="@{/testRequestBody}" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit">
</form>
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String requestBody){
System.out.println("requestBody:"+requestBody);
return "success";
}

输出结果:
requestBody:username=admin&password=123456

二、RequestEntity

RequestEntity封装请求报文的一种类型,需要在控制器方法的形参中设置该类型的形参,当前请求的请求报文就会赋值给该形参,可以通过getHeaders()获取请求头信息,通过getBody()获取请求体信息。

<form th:action="@{/testRequestEntity}" method="post">用户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br><input type="submit" value="测试RequestEntity">
</form>
@RequestMapping("/testRequestEntity")
public String testRequestEntity(RequestEntity<String> requestEntity){
System.out.println("requestHeader:"+requestEntity.getHeaders());
System.out.println("requestBody:"+requestEntity.getBody());
return "success";
}

输出结果:
requestHeader:[host:“localhost:8080”, connection:“keep-alive”, content-length:“27”,
cache-control:“max-age=0”, sec-ch-ua:“” Not A;Brand";v=“99”, “Chromium”;v=“90”, “Google
Chrome”;v=“90"”, sec-ch-ua-mobile:“?0”, upgrade-insecure-requests:“1”, origin:“http://localhost:8
080”, user-agent:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/90.0.4430.93 Safari/537.36”] requestBody:username=admin&password=123

三、@ResponseBody

@ResponseBody用于标识一个控制器方法,可以将该方法的返回值直接作为响应报文的响应体响应到浏览器。

<a th:href="@{/testResponseBody}">通过ResponseBody对象响应浏览器数据</a>
@RequestMapping("/testResponseBody")
@ResponseBody
public String testResponseBody(){
return "success";
}

结果:
浏览器页面显示success

四、SpringMVC处理json

User类:

package com.dragon.mvc.bean;public class User {private Integer id;private String username;private String password;private Integer age;private String sex;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public User(Integer id, String username, String password, Integer age, String sex) {this.id = id;this.username = username;this.password = password;this.age = age;this.sex = sex;}public User() {}}

@ResponseBody处理json的步骤:

  • 导入jackson的依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
  • 在SpringMVC的核心配置文件中开启mvc的注解驱动,此时在HandlerAdaptor中会自动装配一个消息转换器:MappingJackson2HttpMessageConverter,可以将响应到浏览器的Java对象转换为Json格式的字符串.
pom.xml=======================
<mvc:annotation-driven />
  • 在处理器方法上使用@ResponseBody注解进行标识

  • 将Java对象直接作为控制器方法的返回值返回,就会自动转换为Json格式的字符串

@RequestMapping("/testResponseUser")
@ResponseBody
public User testResponseUser(){
return new User(1001,"admin","123456",23,"男");
}
<a th:href="@{/testResponseUser}">通过ResponseUser对象响应浏览器数据</a>

浏览器的页面中展示的结果:
{“id”:1001,“username”:“admin”,“password”:“123456”,“age”:23,“sex”:“男”}

五、SpringMVC处理ajax

<div id="app">
<a th:href="@{/testAjax}" @click="testAjax">testAjax</a><br>
</div>
<script type="text/javascript" th:src="@{/static/js/vue.js}"></script>
<script type="text/javascript" th:src="@{/static/js/axios.min.js}"></script>
<script type="text/javascript">
var vue = new Vue({
el:"#app",
methods:{
testAjax:function (event) {
axios({
method:"post",
url:event.target.href,
params:{
username:"admin",
password:"123456"
}
}).then(function (response) {
alert(response.data);
});
event.preventDefault();
}
}
});
</script>
@RequestMapping("/testAjax")
@ResponseBody
public String testAjax(String username, String password){
System.out.println("username:"+username+",password:"+password);
return "hello,ajax";
}

六、@RestController注解

@RestController注解是springMVC提供的一个复合注解,标识在控制器的类上,就相当于为类添加了@Controller注解,并且为其中的每个方法添加了@ResponseBody注解。

七、ResponseEntity

ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文。


总结

以上就是HttpMessageConverter有关讲解。

http://www.lryc.cn/news/144776.html

相关文章:

  • 计算机网络aaaaaaa
  • pdf.js构建时,报Cannot read property ‘createChildCompiler‘ of undefined #177的解决方法
  • Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【六】
  • idea配置注释模板
  • Unity编辑器扩展:提高效率与创造力的关键
  • Java之对象引用实践
  • IntelliJ IDEA快捷键大全 + 动图演示!
  • React 生命周期
  • 5G智能网关如何解决城市停车痛点难点
  • docker 学习-- 04 实践搭建 1(宝塔)
  • MySQL的mysql-bin.00xx binlog日志文件的清理
  • Java实现SM2前后端加解密
  • 自动化PLC工程师能否转到c#上位机开发?
  • LiveData相关基本使用及去除黏性数据的方法
  • 【MegaCli】安装MegaCli后执行报参数错误
  • 时间范围选择时选中日期所使用的当日内具体时刻 如00:00:00= 23:59:59
  • 算法面试-深度学习面试题整理(2024.8.29开始,每天下午持续更新....)
  • Maven之高版本的 lombok 和 tomcat 7 插件冲突问题
  • 微信小程序申请
  • ffmpeg 配合Fiddler抓包操作
  • 美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以?
  • 【力扣每日一题】2023.8.29 带因子的二叉树
  • origin导出pdf曲线超出边框
  • 由Android10适配到Android12时遇到相关编译失败问题
  • 高职教育应对ChatGPT应用的策略
  • Linux 内核编译参数
  • vscode使用anaconda自带的python环境在终端运行时报错
  • 葡萄叶病害识别(图像连续识别和视频识别,Python代码,pyTorch框架)
  • Oracle drop删除表如何恢复
  • 5、监测数据采集物联网应用开发步骤(5.1)