当前位置: 首页 > wzjs >正文

网站开发是哪个电话营销系统

网站开发是哪个,电话营销系统,做网站的调研报告,外贸推广平台怎么做本文是我的专栏《学透Spring Boot》的第17篇文章,了解更多请移步我的专栏: 学透 Spring Boot_postnull咖啡的博客-CSDN博客 目录 HTTP请求和响应 需求—新的Media Type 实现—新的Media Type 定义转换器 注册转换器 编写Controller 测试新的medi…

本文是我的专栏《学透Spring Boot》的第17篇文章,了解更多请移步我的专栏:

学透 Spring Boot_postnull咖啡的博客-CSDN博客

目录

HTTP请求和响应

需求—新的Media Type

实现—新的Media Type

定义转换器

注册转换器

编写Controller

测试新的mediatype

Http消息转换器实现原理

总结


HTTP请求和响应

很多接口,我们发起HTTP请求,请求参数是json。得到的响应也是json。

但是我们的控制器中,是使用Java对象来接收请求,出参也是Java对象。

而不是JSONObject。

这样的好处是更好操作,不用再次把Json对象转换成Java对象。

这是怎么做到的呢?

是不是和上一篇的Spring MVC Conversion Service 类型转换 一样的原理呢?

是,但不完全是。

需求—新的Media Type

先来实现一个需求,看看能不能实现。

我们希望我们的请求是这样

和普通的请求不太一样,主要有亮点:

  1. 我们的MediaType是自己定义“hehe/nba”
  2. 我们的数据体是自己构造的文本,用###分割字段

一般情况,没人会自定定义媒体类型,用得最多的是xml和json。

我们这里这么做,是为了理解json消息体是怎么解析的。

实现—新的Media Type

定义转换器

首先我们先定义一个新Http消息转换器。

它继承的是HttpMessageConverter接口。

注意这里实现的是HttpMessageConverter接口,和我们上一篇文章的类型转换器不一样,它实现的是Converter接口。

public class CarHttpConverter implements HttpMessageConverter<Car> {private static final String SPLITCHAR = "###";private static final String MY_MEDIA_TYPE1 = "hehe/nba;charset=UTF-8";private static final String MY_MEDIA_TYPE2 = "hehe/nba";@Overridepublic boolean canRead(Class<?> clazz, MediaType mediaType) {if(mediaType == null){return true;}return clazz == Car.class&& (mediaType.equals(MediaType.valueOf(MY_MEDIA_TYPE1)) || mediaType.equals(MediaType.valueOf(MY_MEDIA_TYPE2)));}@Overridepublic boolean canWrite(Class<?> clazz, MediaType mediaType) {if(mediaType == null){return true;}return clazz == Car.class&& (mediaType.equals(MediaType.valueOf(MY_MEDIA_TYPE1)) || mediaType.equals(MediaType.valueOf(MY_MEDIA_TYPE2)));}@Overridepublic List<MediaType> getSupportedMediaTypes() {return List.of(MediaType.valueOf(MY_MEDIA_TYPE1), MediaType.valueOf(MY_MEDIA_TYPE2));}@Overridepublic Car read(Class<? extends Car> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {// 从输入流中读取 CSV 数据并将其转换为 Book 对象InputStreamReader reader = new InputStreamReader(inputMessage.getBody());StringBuilder csvData = new StringBuilder();int character;while ((character = reader.read()) != -1) {csvData.append((char) character);}String[] fields = csvData.toString().split(SPLITCHAR);String type = fields[0];double price = Double.parseDouble(fields[1]);String year = fields[2];return Car.builder().type(type).price(price).year(year).build();}@Overridepublic void write(Car car, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {OutputStreamWriter writer = new OutputStreamWriter(outputMessage.getBody());String csvData = car.getType() + SPLITCHAR + car.getPrice() + SPLITCHAR + car.getYear();writer.write(csvData);writer.flush();}
}

注册转换器

然后,注册这个Http消息转换器

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(new CarHttpConverter());}
}

编写Controller

特别注意,我们这里的consum和produce用的media type是我们自定义的type。

consumes 指定接收HTTP请求的mediaytpe

produces 指定发送HTTP响应的mediatype

@RestController
@Log
public class HttpMsgController {@PostMapping(path = "/buyCar", consumes = "hehe/nba", produces = "hehe/nba")public Car buyCar(@RequestBody Car car){car.setYear("2025");return car;}
}

测试新的mediatype

设置content type。hehe/nba是我们自定义的type。

设置request body,我们的内容是用###做分隔符的。

这是我们约定的格式。

大功告成!

我们没有使用json,但是定了一个一种新的序列化格式!!!hehe/nba!

Http消息转换器实现原理

我们可以debug看看消息转换器注册的代码。

converters列表中包含了我们新定义的转换器,还包括了Jackson的消息转换器。

我们再看看Spring Boot是如何自动配置Jackson的。

找到Spring Boot的配置类列表

怎么定位这个文件,请参考我之前的文章。

列表中包含了Spring MVC的自动配置WebMvcAutoConfiguration

大部分的默认配置在WebMvcConfigurationSupport。

可以看到,当我们的classpath下,有jackson的包,就会自动使用Jackson处理requestbody和response body.

总结

本文我们定义了一个新的content type, 构造新的请求体和响应体。希望通过本文,你对Http 消息转换器有更多的了解。

http://www.dtcms.com/wzjs/800865.html

相关文章:

  • 网站建设试卷摄影一个ip怎么做多个网站
  • 通信管理局网站备案国内四大高端建站公司
  • 哪个网站可以哪些企业做哪些产品沈阳化工大学建设工程网
  • 免费数据源网站金堂网站建设
  • 网站怎么做png阴影电子商务网站开发的基本原则?
  • 网页设计与网站建设实例教程答案wordpress中文主题排行榜
  • 网站开发前如何配置电脑龙岩抖音seo搜索排名
  • 自助建网站代理北京酒店设计公司
  • 网站专业好找工作吗网站搭建技术方案
  • 调查公司做网站需要备案吗wordpress读取mysql
  • 做网站主机要求wordpress 抓取微信
  • 安徽元鼎建设工程有限责任公司网站烟台市芝罘区建设局网站
  • vs做网站不显示图片东莞网站建设智搜宝
  • 烟台外贸网站建设被他人备案后做违法网站
  • 网站建设及推广服务公司营销型网站建设套餐
  • 网站前台架构wordpress 小游戏
  • 住总第三开发建设有限公司网站商城网站备案能通过吗
  • 网站手机版怎么做的做网站如何获取收益
  • 甘肃建设局网站首页iis7.5 wordpress
  • 做自动发货网站指数函数运算法则
  • 都兰县建设局交通局网站东莞淘宝网站建设
  • 局域网网站建设步骤互联网销售是做什么的
  • 濮阳门户网站开发搭建门户网站费用是多少
  • wordpress开启hppts后格式长沙seo公司网站优化
  • 个人主页自助建站wordpress开启2级域名
  • 网站可以查出在哪里做的吗企业展示网站案例
  • 网站开发的框架协议南昌市会做网站有哪几家
  • 如何获取网站根目录链接wordpress 转小程序
  • 网站推广平台有哪些网络营销产品策略案例
  • 专业做电脑系统下载网站好怎么修改网站上传附件大小