报文信息转换器

news2024/11/19 6:21:47

HttpMessageConverter

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

准备

创建模块并完成配置文件编写
在这里插入图片描述

success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" xmlns:th="http://www.thymeleaf.org">
    <title>Title</title>
</head>
<body>
success
</body>
</html>

web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <!--配置编码过滤器-->
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!--配置请求方式put和delete的hiddenHttpMethodFilter-->
  <filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!--配置springMVC的前端控制器DispatcherServlet-->
  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springMVC.xml</param-value>
    </init-param>
    <!--将前端控制器的时间提前到服务器启动时-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

SpringMVC.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--开启扫描组件-->
    <context:component-scan base-package="com.louis"></context:component-scan>
    <!--配值Thymeleaf视图解析器-->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>

@RequestBody

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

HttpController

@Controller
public class HttpController {
    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String requestBody){
        System.out.println("requestBody = " + requestBody);
        return "success";
    }
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" xmlns:th="http://www.thymeleaf.org">
    <title>首页</title>
</head>
<body>
<h3>首页</h3>
<form th:action="@{/testRequestBody}" method="post">
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="submit" value="测试@RequestBody">
</form>
</body>
</html>

测试

在这里插入图片描述

控制台

在这里插入图片描述
在这里插入图片描述

RequestEntity

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

index.html

<form th:action="@{/testRequestEntity}" method="post">
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="submit" value="测试RequestEntity">
</form>

HttpController

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

测试

在这里插入图片描述

后端

在这里插入图片描述

@ResponseBody

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

①直接使用ServletAPI

index.html
<a th:href="@{/testResponse}">通过servletAPI的response对象响应浏览器数据</a>
HttpController
@RequestMapping("/testResponse")
public void testResponse(HttpServletResponse response) throws IOException {
    response.getWriter().write("hello response");
}
测试

在这里插入图片描述

②使用@ResponseBody

为了便于区分将success中的内容修改为如下

<h3>success</h3>
index.html
<a th:href="@{/testResponseBody}">通过@ResponseBody响应浏览器数据</a>
HttpController
@RequestMapping("/testResponseBody")
@ResponseBody
public String testResponseBody(){
    /*加上@ResponseBody之后返回的就不再是视图名称,而是当前响应的响应体*/
    return "success";
}
测试

在这里插入图片描述

不加@ResponseBody

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/955927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP学习--扩展知识点

端口镜像-SPAN 抓包软件只能抓取经过本地的网卡的流量 也就是抓取流量只能抓取本设备的流量 [r1]observe-port interface GigabitEthernet 0/0/2 定义一个SPAN的会话&#xff0c;然后定义监控接口&#xff08;也就是你要用的接口&#xff0c;你连接这个接口来对其他接口抓包…

IDEA批量处理行尾注释

前言 行尾注释写起来比较方便&#xff0c;所以很多时候我们都会习惯把注释写在行尾。 但这个是不符合编程规范的&#xff0c;写的代码注释主要是给后续接手人进行阅读帮助的。按照正常的阅读方式都是先读注释&#xff0c;然后再看代码&#xff0c;如果先看代码再看注释&#…

创建智能问答机器人:上线智能机器人客服,实时为客户提供解决方案

随着企业扩大规模和业务增长&#xff0c;客户咨询和服务请求增加。传统人工客服难以处理大量咨询&#xff0c;而智能化的AI客服可以同时满足多个客户需求。 智能问答机器人 创建智能问答机器人后&#xff0c;能自动化处理大量客户咨询&#xff0c;显著降低企业运营成本&#xf…

Multimedia-播放器-架构1

目录 引言 概念 播放器 播放器的工作流程 播放器的架构 IO模块 Parser&Demuxer模块 Decoder模块 渲染模块 小结 引言 什么是播放器&#xff1f; 播放器是做什么的&#xff1f;怎么做的&#xff1f; 概念 播放器 可以指软件&#xff0c;也可以指硬件 软件&am…

代码随想录算法训练营之JAVA|第四十一天|139. 单词拆分

今天是第 天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 139. 单词拆分https://leetcode.cn/problems/word-break/ 第一想法 看完之后完全没有想法。 看完代码随想录之后的想法 这是一个完全背包的问题&#xff0c;使用完全背包的解法。 单词就…

「C++程序设计 (面向对象进阶)」学习笔记・一

0、引言 本专栏的系列文章是在学习 北京邮电大学 崔毅东 老师的《C程序设计 (面向对象进阶)》课程过程中整理的。欢迎前往专栏了解更多相关内容~ &#x1f600; 有关于现代 C 的基本介绍&#xff0c;请前往《现代C基本介绍》&#xff01; &#x1f514; 先决条件 本专栏的系列…

微信小程序发布一个npm包

参考:https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html 同npm一样流程 npm install weixin_heath_apis

gRPC-Gateway 快速实战

今天来分享一波 gRPC-Gateway &#xff0c; 之前咱们有分享过什么是 gRPC 及其使用方式&#xff0c;可以看看这些关于 gRPC 的历史文章&#xff1a; gRPC介绍 gRPC 客户端调用服务端需要连接池吗&#xff1f; gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分…

大门设得好,财旺运也旺

大门作为我们家庭里一扇保护家人的屏障&#xff0c;可以说是非常重要的&#xff0c;它不仅能起到安全作用&#xff0c;在风水上也是非常关键的。大门在风水中是财运进气的门道&#xff0c;大门风水的好坏直接影响到房屋的整体风水&#xff0c;好的大门风水可以让主人旺财又旺运…

Jaeger的经典BUG原创

前端&#xff0c;笔者在使用Jaeger进行Trace监控的时候&#xff0c;当数据量增大到一定数量级时&#xff0c;出现了一次CPU暴增导致节点服务器挂了的经典案例&#xff0c;这里对案例进行一个简单的抽象&#xff0c;供大家参考&#xff1a; 首先通过pprof对耗时的函数进行定位&…

华为云CodeArts IDE快速入门和使用详解

华为云CodeArts IDE使用详解 一、用户界面1. 初始界面2. 打开项目界面3. 资源管理器4. 编辑器5. 命令面板6. 扩展应用7. Git管理 二、设置1. 设置编辑器2. settings.json 三、代码编辑1. 快捷操作2. 代码补全 四、RemoteShell1. 添加主机连接 文档参考: 华为云CodeArts IDE文档…

【高级程序设计语言C++】异常与智能指针

1. 异常2. 智能指针2.1. auto_ptr2.2. unique_ptr2.3. shared_ptr2.4. 循环引用2.5. weak_ptr2.6. 定制删除器 1. 异常 当我们编写程序时&#xff0c;可能会遇到各种错误和异常情况&#xff0c;例如除以零、访问无效的内存地址等。为了能够处理这些异常情况&#xff0c;C提供了…

(笔记六)利用opencv进行图像滤波

&#xff08;1&#xff09;自定义卷积核图像滤波 import numpy as np import matplotlib.pyplot as plt import cv2 as cvimg_path r"D:\data\test6-6.png" img cv.imread(img_path)# 图像滤波 ker np.ones((6, 6), np.float32)/36 # 构建滤波器&#xff08;卷积…

Three.js后处理后物体表面出现条纹

初始化 WebGLRenderer 时简单启用 logarithmicDepthBuffer: true 解决了问题。 根据文档&#xff0c;启用可能会导致性能下降&#xff0c;因此请根据您的性能预算考虑使用它。 缩小相机的near和far 后处理对于深度精度非常敏感。大视锥体很快就会使此类 AO 通道变得无法使用 th…

小兔鲜儿 - 微信登录

目录 微信登录​ 登录方式 静态结构​ 获取登录凭证​ 获取手机号码​ 微信登录接口(生产环境) 模拟手机登录(开发环境) 用户信息持久化存储​ 涉及知识点&#xff1a;微信授权登录&#xff0c;文件上传&#xff0c;Store 状态管理等。 微信登录​ 微信小程序的开放…

SpringBoot虚拟路径映射

要求&#xff1a;访问&#xff1a;127.0.0.1/image/下的文件时&#xff0c;自动映射到真实路径&#xff1a;D:Files\。 virtualFileDepositPath: /image/** realityFileDepositPath: C:\Users\xin\Desktop\imgCreate\Files\ import org.springframework.beans.factory.annota…

整理的10个更好用的画图软件,设计绘图必看!

随着设计工作的不断发展&#xff0c;画图也成了设计师日常的设计工作之一&#xff0c;今天本文整理了10个好用的画图软件&#xff0c;能满足设计师的多种画图需求&#xff0c;一起来看看吧&#xff01; 1、即时设计 即时设计做为一个功能多样的画图软件&#xff0c;不仅可以满…

DPDW01+ 国产锂电池保护电路

描述&#xff1a; DPDW01是一个锂电池保护电路&#xff0c;为避免锂电池因过充电、过放电、电流过大导致电池寿命缩短或电池被损坏而设计的。它具有高精确度的电压检测与时间延迟电路。 主要特点&#xff1a; 工作电流低&#xff1b; 过充检测 4.3V&#xff0c;过充释放 4.0…

Shell - 根据PID过滤进程信息

文章目录 #!/bin/bash #Function: 根据用户输入的PID&#xff0c;过滤出该PID所有的信息 read -p "请输入要查询的PID: " P nps -aux| awk $2~/^$P$/{print $11}|wc -l if [ $n -eq 0 ];thenecho "该PID不存在&#xff01;&#xff01;"exit fi echo "…

TikTok成旺季“主战场”,大促节点一览无遗

随着海外短视频的兴起&#xff0c;拥有10亿月活用户的TikTok已经成为旺季大促的主要营销渠道。从TikTok上的话题标签&#xff0c;可以看出用户对节日及大促节点的关注度&#xff0c;借势飙升的话题流量是大促营销的重要方式之一。数据显示&#xff0c;2023上半年的斋月期间&…