SpringMVC 学习(七)之报文信息转换器 HttpMessageConverter

SpringMVC 学习(七)之报文信息转换器 HttpMessageConverter

目录

1 HttpMessageConverter 介绍

2 @RequestBody 注解

3 @ResponseBody 注解

4 RequestEntity

5 ResponseEntity

6 @RestController 注解


1 HttpMessageConverter 介绍

         HttpMessageConverter 报文信息转换器,将请求报文(如JSON、XML、HTML等)转换为 java 对象,或将 Java 对象转换为响应报文。SpringMVC 提供了多个内置的 HttpMessageConverter 实现,以支持不同的数据格式和数据类型。

以下是一些常见的 HttpMessageConverter 实现:

  • MappingJackson2HttpMessageConverter:用于将 Java 对象转换为 JSON 格式的 HTTP 响应,或将 JSON 格式的 HTTP 请求转换为 Java 对象

  • StringHttpMessageConverter:用于将 String 对象转换为 HTTP 响应的报文信息,或将 HTTP 请求中的报文信息转换为 String 对象

  • MappingJackson2XmlHttpMessageConverter:用于将 Java 对象转换为 XML 格式的 HTTP 响应,或将 XML 格式的 HTTP 请求转换为 Java 对象

  • ByteArrayHttpMessageConverter:用于将字节数组转换为 HTTP 响应的报文信息,或将 HTTP 请求中的报文信息转换为字节数组

       HttpMessageConverter 提供了两个注解 (@RequestBody 和 @ResponseBody) 和两个类型 (RequestEntity 和 ResponseEntity)。 其中,@RequestBody 和 @ResponseBody 是用于处理 HTTP 请求和响应的注解,而 RequestEntity 和 ResponseEntity 是用于封装 HTTP 请求和响应的类型。

        SpringMVC 能够自动根据请求的 Content-Type 和 A***ept 来选择合适的转换器进行报文信息的转换。

  • @RequestBody 注解: 根据请求头的 Content-Type 属性,逐一匹配合适的HttpMessageConverter 转换器来读取数据
  • @ResponseBody 注解: 根据请求头的 A***ept 属性(逗号分隔),来遍历可用的 HttpMessageConverter 转换器,以找到能够处理对应类型的转换器

注:使用转换器时,需要注意转换器的优先级,如上图所示,数字越小,优先级越高。

@RequestBody 注解

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

@PostMapping("/create")
public void createNewObject(@RequestBody MyObject myObject) {
    // 处理接收到的对象
}

@ResponseBody 注解

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

@GetMapping("/get")
@ResponseBody
public MyObject getObject() {
    MyObject myObject = // 获取对象的逻辑
    return myObject;
}

RequestEntity

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

@RequestMapping("/testRequestEntity")
public String testRequestEntity(RequestEntity<String> requestEntity){
    System.out.println("requestHeader:"+requestEntity.getHeaders());
    System.out.println("requestBody:"+requestEntity.getBody());
    return "su***ess";
}

5 ResponseEntity

        ResponseEntity 用于封装 HTTP 响应的详细信息。它提供了一种灵活的方式来表示和处理 HTTP 响应,包括状态码、响应头和响应体。

@GetMapping("/hello")
ResponseEntity<String> hello() {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Custom-Header", "Value");

    return new ResponseEntity<>("Hello World!", headers, HttpStatus.OK);
}

        上述代码中,"Hello World!" 是响应体的 Java 对象,可以是任意类型 (如 String、Object、List 等),headers 是响应头,HttpStatus.OK 是状态码,使用 HttpStatus 枚举来指定。

6 @RestController 注解

        @RestController 注解是 SpringMVC 中用于标记控制器类的一个注解。它使得控制器类可以直接返回数据(字符串、对象、集合等)给客户端,而不需要额外的视图解析。

@RestController
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}
转载请说明出处内容投诉
CSS教程_站长资源网 » SpringMVC 学习(七)之报文信息转换器 HttpMessageConverter

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买