SpringMVC:消息转换器

1. HttpMessageConvertor

简介

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

转换器

如上图所示:HttpMessageConverter接口的可以将请求协议转换成Java对象,也可以把Java对象转换为响应协议。**HttpMessageConverter是接口,SpringMVC帮我们提供了非常多而丰富的实现类。每个实现类都有自己不同的转换风格。****对于我们程序员来说,Spring MVC已经帮助我们写好了,我们只需要在不同的业务场景下,选择合适的HTTP消息转换器即可。

2. @ResponseBody注解

当加上@ResponseBody注解后返回的内容不再是逻辑视图

* 底层会通过StringHttpMessageConverter解析返回的数据并展示到前端页面中

* 即无需进行页面跳转从而展示不同的资源组件

java 复制代码
@GetMapping("/hello")
    @ResponseBody
    public String testResponseBodyAxios() {
        return "通过@ResponseBody注解直接返回数据并展示,无需页面跳转";
    }
复制代码
/***
 * 当控制器上的方法加上@ResponseBody注解并且返回的内容为JavaBean
 * 底层通过MappingJackson2HttpMessageConverter类解析成JSON串并进行返回
 * 前提:   导入JSON组件,可以将前端发来的JSON解析成对象,或者将后端字符串或者对象解析成功JSON串后进行发送
 *         <dependency>
 *             <groupId>com.fasterxml.jackson.core</groupId>
 *             <artifactId>jackson-databind</artifactId>
 *             <version>2.17.0</version>
 *         </dependency>
 */
java 复制代码
    @GetMapping("/axios")
    @ResponseBody
    public User testObjectAxios() {
        User user = new User("张三", 19);
        return user;
    }

3. @RequestBody注解

复制代码
/***
 * @RequestBody注解:
 * 该注解只能用于方法形参上
 * 该注解直接将请求信息传递给Java程序,在Java程序中可以直接使用String类型的变量接收请求信息
 * 该注解底层基于FormHttpMessageConverter实现
 *
 * 重点:
 * 如果前端发送过来的请求信息是JSON字符串,可将JSON字符串直接转换为Java对象
 * 前提也需要导入依赖
 *      <dependency>
 *          <groupId>com.fasterxml.jackson.core</groupId>
 *          <artifactId>jackson-databind</artifactId>
 *          <version>2.17.0</version>
 *      </dependency>
 */
java 复制代码
    @PostMapping("/save")
    @ResponseBody
    public String testRequest(@RequestBody String requestStr) {
        System.out.println(requestStr);
        return requestStr;
    }
java 复制代码
    @PostMapping("/save")
    public String testRequest(@RequestBody User user) {
        System.out.println(user);
        return "ok";
    }

4. RequestEntity类

复制代码
/***
 * RequestEntity类:
 * 这个类的实例封装了整个协议
 * Springmvc自动创建好,可以直接传递给控制器方法的形参上
 * 可通过该实列对象获取协议中的任何信息,包括请求方法、请求体、请求头
 */
java 复制代码
    @GetMapping("/requestEntity")
    public String test(RequestEntity requestEntity) {
        System.out.println(requestEntity.getMethod());
        System.out.println(requestEntity.getType());
        System.out.println(requestEntity.getUrl());
        return "ok";
    }

5. ResponseEntity类

ResponseEntity不是注解,是一个类。用该类的实例可以封装响应协议,包括:状态行、响应头、响应体。也就是说:如果你想定制属于自己的响应协议,可以使用该类。假如我要完成这样一个需求:前端提交一个id,后端根据id进行查询,如果返回null,请在前端显示404错误。如果返回不是null,则输出返回的user。

java 复制代码
@Controller
public class UserController {

    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.getUserById(id);
        if (user == null) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
        } else {
            return ResponseEntity.ok(user);
        }
    }
}
相关推荐
无代码专家11 小时前
设备巡检数字化解决方案:构建高效闭环管理体系
java·大数据·人工智能
tanxiaomi11 小时前
Redisson分布式锁 和 乐观锁的使用场景
java·分布式·mysql·面试
零匠学堂202511 小时前
移动学习系统,如何提升企业培训效果?
java·开发语言·spring boot·学习·音视频
小杨快跑~12 小时前
从装饰者到桥接再到工厂:模式组合的艺术
java·开发语言·设计模式
饕餮争锋12 小时前
Spring内置的Bean作用域介绍
java·后端·spring
却话巴山夜雨时i12 小时前
394. 字符串解码【中等】
java·数据结构·算法·leetcode
张人大 Renda Zhang12 小时前
Java 虚拟线程 Virtual Thread:让“每请求一线程”在高并发时代复活
java·jvm·后端·spring·架构·web·虚拟线程
一勺菠萝丶12 小时前
解决 SLF4J 警告问题 - 完整指南
java·spring boot·后端
济南壹软网络科技有限公司12 小时前
架构深潜:通霸IM——私有化部署、全链路开源的高可用企业级即时通讯技术基座
java·架构·开源·即时通讯源码·即时通讯im
小股虫12 小时前
手搓限流第二版:限流算法与动态阈值的深度整合
java