HttpMessageConverter的使用

111 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

添加以下依赖 配置springmvc环境

4.0.0

<groupId>org.example</groupId>
<artifactId>rest_mvc</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>

<packaging>war</packaging>

<dependencies>
    <!--SpringMVC-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.9</version>
    </dependency>

    <!--ServletAPI-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>

    <!--Spring5和Thymeleaf整合包-->
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring5</artifactId>
        <version>3.0.12.RELEASE</version>
    </dependency>
</dependencies>

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

1、@RequestBody

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

控制层

    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String requestBody){
        System.out.println(requestBody);
        return "target";
    }

前端

<form th:action="@{/testRequestBody}" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="添加"><br>
</form>

在这里插入图片描述

2、RequestEntity

    @RequestMapping("/testrequestEntity")
    public String testrequestEntity(RequestEntity<String> requestEntity){
        //表示整个请求报文信息
        System.out.println("请求头信息"+requestEntity.getHeaders());
//        获取报文请求体
        System.out.println("请求体信息:"+requestEntity.getBody());
        return "target";
    }

在这里插入图片描述

3、 @ResponseBody

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

    @RequestMapping("/testResponseBody")
    @ResponseBody //用来标识当前控制器方法
    public String testResponseBody(){
//设置了ResponseBody注解后当前值就不是视图昵称而是响应报文响应体
        return "target";
    }

在这里插入图片描述