【第12章】spring-mvc自定义类型转换器

文章目录

  • 前言
  • 一、请求对象
  • 二、自定义转换器
  • 三、注册转换器
  • 四、控制器
  • 五、执行顺序
  • 六、执行结果
  • 总结


前言

【第6章】spring类型转换器
在spring系列已经介绍了类型转换器、接下来我们通过案例了解下转换器在SpringMvc中的应用。

场景模拟:我们接收到客户端请求,解析请求字符串及进一步解析请求体,返回Request请求对象。


一、请求对象

package org.example.springmvc.converters.custom;import lombok.Getter;
import lombok.Setter;
import lombok.ToString;/*** Create by zjg on 2024/5/1*/
@Getter
@Setter
@ToString
public class Request {private String id;//流水号private String headers;//请求头private String body;//请求体private String timestamp;//时间戳private String salt;//盐值
}

二、自定义转换器

package org.example.springmvc.converters.custom;import com.alibaba.fastjson2.JSONObject;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.StringUtils;
import java.util.Base64;/*** Create by zjg on 2024/5/1*/
public class RequestConverter implements Converter<String,Request> {@Overridepublic Request convert(String source) {Request request = JSONObject.parseObject(source, Request.class);if(!StringUtils.hasText(request.getId())){throw new IllegalArgumentException("请求流水号不能为空!");}request.setBody(new String(Base64.getDecoder().decode(request.getBody())));return request;}
}

三、注册转换器

package org.example.springmvc.config;import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** Create by zjg on 2024/4/27*/
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(new RequestConverter());WebMvcConfigurer.super.addFormatters(registry);}
}

四、控制器

package org.example.springmvc.converters;import com.alibaba.fastjson2.JSONObject;
import org.example.springmvc.converters.custom.Request;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** Create by zjg on 2024/5/1*/
@RestController
public class ConverterController {@RequestMapping("/getRequest")public String getRequest(){Request request=new Request();request.setId("B490B5EBF6F3CD402E515D22BCDA1598");request.setHeaders("");request.setBody("5a+55oiR5p2l6K+077yM5YGa6I+c5YGa6Z2i5YyF5piv5LiA56eN5aix5LmQ5pa55byP77yM5piv5omT5Y+R5pe26Ze055qE5pyJ5pWI5omL5q6177yM5piO55m95ZCX77yf");request.setTimestamp("1714573836828");request.setSalt("123456");return JSONObject.toJSONString(request);}@RequestMapping("/request")public Request request(Request request){System.out.println(request);return request;}
}

五、执行顺序

localhost:8080/getRequest
localhost:8080/request

六、执行结果

Request(id=B490B5EBF6F3CD402E515D22BCDA1598, headers=, body=对我来说,做菜做面包是一种娱乐方式,是打发时间的有效手段,明白吗?, timestamp=1714573836828, salt=123456)

总结

回到顶部
官方文档

postman测试脚本已上传,下载导入即可用。

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

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

相关文章

【MyBatisPlus】代码生成器、条件分页查询

代码生成器 第一步 引入依赖 <!-- mybatisPlus的代码生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1</version></dependency>第二步 创…

极验4 一键解混淆

提示&#xff01;本文章仅供学习交流&#xff0c;严禁用于任何商业和非法用途&#xff0c;未经许可禁止转载&#xff0c;禁止任何修改后二次传播&#xff0c;如有侵权&#xff0c;可联系本文作者删除&#xff01; AST简介 AST&#xff08;Abstract Syntax Tree&#xff09;&a…

Linux专栏03:使用Xshell远程连接云服务器

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Linux专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 使用Xshell远程连接云服务器 编号&#xff1a;03 文章目录 使用Xsh…

Redis学习(九)|如何保证MySQL和Redis的数据一致性

文章目录 引言什么是数据一致性为什么会出现不一致的情况如何保证一致性分布式事务异步更新策略双写模式缓存失效策略定时同步策略 结论 引言 数据一致性是任何系统设计中至关重要的一个方面。在涉及到同时使用Redis和MySQL的场景中&#xff0c;保证两者之间的数据一致性尤为重…

Redis 中,集合(Set)

在 Redis 中&#xff0c;集合&#xff08;Set&#xff09;是一种无序的、由字符串组成的数据结构。集合中的每个元素都是唯一的&#xff0c;即集合不允许重复的元素。Redis 集合通过哈希表实现&#xff0c;添加、删除、查找元素的操作都能在平均常数时间内完成。 ### 集合的特…

Jenkins集成Kubernetes 部署springboot项目

文章目录 准备部署的yml文件Harbor私服配置测试使用效果Jenkins远程调用参考文章 准备部署的yml文件 apiVersion: apps/v1 kind: Deployment metadata:namespace: testname: pipelinelabels:app: pipeline spec:replicas: 2selector:matchLabels:app: pipelinetemplate:metada…

【linux系统开发基本命令】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 基本命令dockergitCpython总结 基本命令 sudo 管理员权限&#xff0c;一般用在命令的最前面 例如&#xff1a; sudo rm our.py删除our.py文件 pwd打印当前目录 cd…

软件设计师-应用技术-数据结构及算法题4

考题形式&#xff1a; 第一题&#xff1a;代码填空 4-5空 8-10第二题&#xff1a;时间复杂度 / 代码策略第三题&#xff1a;拓展&#xff0c;跟一组数据&#xff0c;把数据带入代码中&#xff0c;求解 基础知识及技巧&#xff1a; 1. 分治法&#xff1a; 基础知识&#xff1…

STM32F103 ADC驱动程序设计

设计了一种通过软件触发&#xff0c;循环采集的ADC驱动程序 #include "stdbool.h" #include "string.h" #include "stm32f0xx_ll_bus.h" #include "stm32f0xx_ll_gpio.h" #include "stm32f0xx_ll_adc.h" #include "stm…

【Vue3 生命周期与组合式API】

文章目录 一、Vue3 生命周期概述二、Vue3 组合式API 与选项式API 的对比1. 选项式API 生命周期钩子函数常用的生命周期钩子函数包括&#xff1a; 2. 组合式API 的优势组合式API 的主要优势包括&#xff1a;在生命周期管理上的优势 三、Vue3 组合式API 生命周期钩子函数1. setup…

语音识别--降噪

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

三剑客之grep

grep初级简单使用&#xff1a;Liunx查找&过滤-CSDN博客 正则表达式-CSDN博客 目录 grep分类 返回值 使用返回值控制流程 grep参数示例 基本参数 grep与正则表达式的搭配使用与示例 看完正则与示例进行无答案式练习 grep 用于在文件或输入流中查找特定模式或文本。…

uniapp的app端推送功能,不使用unipush

1&#xff1a;推送功能使用htmlPlus实现&#xff1a;地址HTML5 API Reference (html5plus.org) 效果图&#xff1a; 代码实现&#xff1a; <template><view class"content"><view class"text-area"><button click"createMsg&q…

什么是DDoS攻击?DDoS攻击的原理是什么?

一、DDoS攻击概念 DDoS攻击又叫“分布式拒绝服务”(Distributed DenialofService)攻击&#xff0c;它是一种通过控制大量计算机、物联网终端或网络僵尸&#xff08;Zombie&#xff09;来向目标网站发送大量请求&#xff0c;从而耗尽其服务器资源&#xff0c;导致正常用户无法访…

设计网页用什么软件

在设计网页时&#xff0c;可以使用多种软件来完成不同的任务。以下是一些常用的网页设计软件&#xff0c;以及它们的特点和用途。 1. Adobe Photoshop&#xff1a; Adobe Photoshop 是一款功能强大的图像编辑软件。在网页设计中&#xff0c;它常用于创建和编辑网页所需的图像、…

详细介绍如何在Windows系统上安装Anaconda

**一、引言** Anaconda是一个开源的Python发行版本&#xff0c;它包含了conda、Python等180多个科学包及其依赖项。Anaconda的优点在于它可以帮助用户解决安装包的依赖问题&#xff0c;方便用户管理多个环境&#xff0c;并且提供了一个完整的科学计算环境。本指南将详细介绍如…

手动配置dns后网速变慢

之前因为自动的dns能上qq但打不开网页&#xff0c;就手动设置了一个&#xff0c;结果近些天时不时出现网页图片加载慢的问题&#xff0c;影响到我看美女图片了&#xff0c;是可忍熟不可忍 测了下网速&#xff0c;很快&#xff0c;下载上传都是三位数的&#xff0c;那显然不是网…

element+ant 组件点

ant中table设置默认排序 a-table中的:column属性,设置对应的列上 item.sortOrder params.sort_type asc ? ascend : descend 判断ant-table中是否有横向坐标轴 const hasHorizontalScrollbar() > {const table document.querySelector(.ant-table-content);//可修改,…

RabbitMQ是如何保证消息可靠性的?——Java全栈知识(16)

RabbitMQ 的消息不可靠也就是 RabbitMQ 消息丢失只会发生在以下几个方面&#xff1a; 生产者发送消息到 MQ 或者 Exchange 过程中丢失。Exchange 中的消息发送到 MQ 中丢失。消息在 MQ 或者 Exchange 中服务器宕机导致消息丢失。消息被消费者消费的过程中丢失。 大致就分为生…

Star-CCM+分配零部件至区域1-将所有零部件分配至区域

前言 Star-CCM中&#xff0c;在划分网格之前需要将零部件分配至区域&#xff0c;然后才可以划分网格。如下图1所示&#xff0c;分配零部件至区域需要选择创建区域的方式、创建边界的方式以及交界面的类型。 图1 将零部件分配至区域 1 创建区域的方式选择 如下图2所示&#x…