欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > SpringMVC:消息转换器

SpringMVC:消息转换器

2025/3/10 18:46:58 来源:https://blog.csdn.net/2301_79526467/article/details/139444475  浏览:    关键词:SpringMVC:消息转换器

1. HttpMessageConvertor

简介

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

 转换器

 

 

 

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

2. @ResponseBody注解 

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

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

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

@GetMapping("/hello")@ResponseBodypublic 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>*/
    @GetMapping("/axios")@ResponseBodypublic 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>*/
    @PostMapping("/save")@ResponseBodypublic String testRequest(@RequestBody String requestStr) {System.out.println(requestStr);return requestStr;}
    @PostMapping("/save")public String testRequest(@RequestBody User user) {System.out.println(user);return "ok";}

4. RequestEntity类

/**** RequestEntity类:* 这个类的实例封装了整个协议* Springmvc自动创建好,可以直接传递给控制器方法的形参上* 可通过该实列对象获取协议中的任何信息,包括请求方法、请求体、请求头*/
    @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。 

@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);}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词