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

如何在ftp给网站做百度自动推送seo推广软件怎样

如何在ftp给网站做百度自动推送,seo推广软件怎样,如何赋予网站建设以生命力,江苏网站开发建设文章目录 自定义转换器基本介绍应用实例查看源码注意事项和细节 处理JSON需求说明应用实例 内容协商基本介绍应用实例debug源码优先返回xml注意事项和细节 ⬅️ 上一篇: springboot系列九: 接收参数相关注解 🎉 欢迎来到 springboot系列十: 自定义转换器&#xff0c…

文章目录

  • 自定义转换器
    • 基本介绍
    • 应用实例
    • 查看源码
    • 注意事项和细节
  • 处理JSON
    • 需求说明
    • 应用实例
  • 内容协商
    • 基本介绍
    • 应用实例
    • debug源码
    • 优先返回xml
    • 注意事项和细节

在这里插入图片描述


⬅️ 上一篇: springboot系列九: 接收参数相关注解


🎉 欢迎来到 springboot系列十: 自定义转换器,处理JSON,内容协商 🎉

在本篇文章中,我们将探讨如何在 Spring Boot 中实现自定义转换器、处理 JSON 数据以及进行内容协商。通过掌握这些技术,您可以更灵活地处理不同格式的数据,提高应用程序的兼容性和用户体验。


🔧 本篇需要用到的项目:


自定义转换器

基本介绍

1.SpringBoot在响应客户端请求时, 将提交的数据封装成对象时, 使用了内置转换器

2.SpringBoot也支持自定义转换器, 这个内置转换器在debug的时候, 可以看到, 提供了124个内置转换器, 看下源码. GenericConverter类-ConvertiblePair(内部类)

在这里插入图片描述

在这里插入图片描述]

应用实例

需求说明: 演示自定义转换器使用

1.修改save.html

<!--使用自定义转换器关联car, 字符串整体提交, 使用,号间隔-->
坐骑: <input name="name" value="碧水金睛兽,666.6"><br/

2.创建src/main/java/com/zzw/springboot/config/WebConfig.java, 增加自定义转换器
springboot系列四: sprintboot容器功能

/*** @Configuration(proxyBeanMethods = false)* 1.表示 WebConfig 是一个配置类* 2.proxyBeanMethods = false 表示使用Lite模式*/
@Configuration(proxyBeanMethods = false)
public class WebConfig {//注入bean WebMvcConfiger@Beanpublic WebMvcConfigurer webMvcConfigurer() {//整个是WebMvcConfigurer接口的匿名内部类return new WebMvcConfigurer() {@Overridepublic void addFormatters(FormatterRegistry registry) {/*** 解读* 1.在addFormatters方法中, 增加一个自定义转换器* 2.增加自定义转换器 String -> Car* 3.增加的自定义转换器会注册到 converters 容器中* 4.converters 底层结构是 ConcurrentHashMap, 内置有124个转换器[不同版本个数不一样~]* 5.一会我们debug查看这些转换器*/registry.addConverter(new Converter<String, Car>() {//传入Converter接口的匿名内部类@Overridepublic Car convert(String source) {//source就是 传入的字符串 碧水金睛兽,666.6//这里加入自定义的转换业务代码if (!ObjectUtils.isEmpty(source)) {String[] split = source.split(",");Car car = new Car();car.setVehicleName(split[0]);car.setVehiclePrice(Double.parseDouble(split[1]));return car;}return null;}});}};}
}

3.测试
monster = Monster(id=100, name=张三, age=30, maritalStatus=false, birthday=Sat Jan 01 00:00:00 CST 1994, car=Car(vehicleName=碧水金睛兽, vehiclePrice=666.6))

查看源码

1.debug, 可以看到我们新增的Converter

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

快捷键查看有多少元素

在这里插入图片描述

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

注意事项和细节

1.注册转换器换种写法, 方便理解

/*** @Configuration(proxyBeanMethods = false)* 1.表示 WebConfig 是一个配置类* 2.proxyBeanMethods = false 表示使用Lite模式*/
@Configuration(proxyBeanMethods = false)
public class WebConfig {//注入bean WebMvcConfiger@Beanpublic WebMvcConfigurer webMvcConfigurer() {//整个是WebMvcConfigurer接口的匿名内部类return new WebMvcConfigurer() {@Overridepublic void addFormatters(FormatterRegistry registry) {/*** 解读* 1.在addFormatters方法中, 增加一个自定义转换器* 2.增加自定义转换器 String -> Car* 3.增加的自定义转换器会注册到 converters 容器中* 4.converters 底层结构是 ConcurrentHashMap, 内置有124个转换器[不同版本个数不一样~]* 5.一会我们debug查看这些转换器*//*registry.addConverter(new Converter<String, Car>() {//传入Converter接口的匿名内部类@Overridepublic Car convert(String source) {//source就是 传入的字符串 碧水金睛兽,666.6//这里加入自定义的转换业务代码if (!ObjectUtils.isEmpty(source)) {String[] split = source.split(",");Car car = new Car();car.setVehicleName(split[0]);car.setVehiclePrice(Double.parseDouble(split[1]));return car;}return null;}});*///换种写法注册自定义转换器, 方便理解//1.先创建一个自定义的转换器Converter<String, Car> zzwConverter = new Converter<String, Car>() {//传入Converter接口的匿名内部类@Overridepublic Car convert(String source) {//source就是 传入的字符串 碧水金睛兽,666.6//这里加入自定义的转换业务代码if (!ObjectUtils.isEmpty(source)) {String[] split = source.split(",");Car car = new Car();car.setVehicleName(split[0]);car.setVehiclePrice(Double.parseDouble(split[1]));return car;}return null;}};//添加转换器到converters容器registry.addConverter(zzwConverter);//还可以增加更多的转换器....}};}
}

2.假如我们不添加自定义转换器, 会报typeMismatch错误, 报400错误. 而400错误是客户端的错误, 请求包含语法错误.
JavaWeb系列八: WEB 开发通信协议(HTTP协议)

在这里插入图片描述

3.创建两个自定义转换器

/*** @Configuration(proxyBeanMethods = false)* 1.表示 WebConfig 是一个配置类* 2.proxyBeanMethods = false 表示使用Lite模式*/
@Configuration(proxyBeanMethods = false)
public class WebConfig {//注入bean WebMvcConfiger@Beanpublic WebMvcConfigurer webMvcConfigurer() {//整个是WebMvcConfigurer接口的匿名内部类return new WebMvcConfigurer() {@Overridepublic void addFormatters(FormatterRegistry registry) {/*** 解读* 1.在addFormatters方法中, 增加一个自定义转换器* 2.增加自定义转换器 String -> Car* 3.增加的自定义转换器会注册到 converters 容器中* 4.converters 底层结构是 ConcurrentHashMap, 内置有124个转换器[不同版本个数不一样~]* 5.一会我们debug查看这些转换器*//*registry.addConverter(new Converter<String, Car>() {//传入Converter接口的匿名内部类@Overridepublic Car convert(String source) {//source就是 传入的字符串 碧水金睛兽,666.6//这里加入自定义的转换业务代码if (!ObjectUtils.isEmpty(source)) {String[] split = source.split(",");Car car = new Car();car.setVehicleName(split[0]);car.setVehiclePrice(Double.parseDouble(split[1]));return car;}return null;}});*///换种写法注册自定义转换器, 方便理解//1.先创建一个自定义的转换器Converter<String, Car> zzwConverter = new Converter<String, Car>() {//传入Converter接口的匿名内部类@Overridepublic Car convert(String source) {//source就是 传入的字符串 碧水金睛兽,666.6//这里加入自定义的转换业务代码if (!ObjectUtils.isEmpty(source)) {String[] split = source.split(",");Car car = new Car();car.setVehicleName(split[0]);car.setVehiclePrice(Double.parseDouble(split[1]));return car;}return null;}};//还可以增加更多的转换器....//第2个自定义的转换器Converter<String, Monster> zzwConverter2 = new Converter<String, Monster>() {@Overridepublic Monster convert(String source) {return null;}};//添加转换器到converters容器registry.addConverter(zzwConverter);registry.addConverter(zzwConverter2);}};}
}

debug, 看一看 converters容器 是不是变成了 126 个.

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

4.创建三个自定义转换器, 由于key是[源类型->目标类型], 所以会覆盖掉一个.

//1.先创建一个自定义的转换器
Converter<String, Car> zzwConverter = new Converter<String, Car>() {//传入Converter接口的匿名内部类@Overridepublic Car convert(String source) {//source就是 传入的字符串 碧水金睛兽,666.6//这里加入自定义的转换业务代码if (!ObjectUtils.isEmpty(source)) {String[] split = source.split(",");Car car = new Car();car.setVehicleName(split[0]);car.setVehiclePrice(Double.parseDouble(split[1]));return car;}return null;}
};//还可以增加更多的转换器....
//第2个自定义的转换器
Converter<String, Monster> zzwConverter2 = new Converter<String, Monster>() {@Overridepublic Monster convert(String source) {return null;}
};
//第3个自定义的转换器
Converter<String, Car> zzwConverter3 = new Converter<String, Car>() {@Overridepublic Car convert(String source) {return null;}
};//添加转换器到converters容器
registry.addConverter(zzwConverter);
registry.addConverter(zzwConverter2);
registry.addConverter(zzwConverter3);

1)测试, 是否覆盖.

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

2)查看 converters 容器. 因为第三个转换器和第一个转换器 key 是相同的, 所以覆盖掉了.

在这里插入图片描述

处理JSON

需求说明

演示返回JSON格式的数据

应用实例

1.SpringBoot 支持返回 JSON 格式数据, 在启用WEB开发场景时, 已经引入了相关依赖.
springboot系列二: sprintboot依赖管理

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

2.新建src/main/java/com/zzw/springboot/controller/ResponseController.java

@Controller
public class ResponseController {//编写方法, 返回monster数据 要求以json格式返回@GetMapping(value = "/getMonster")@ResponseBodypublic Monster getMonster() {//说明//开发中 monster对象是从db获取,这里我们模拟一个mosnter对象Monster monster = new Monster();monster.setId(100);monster.setName("张三");monster.setAge(18);monster.setBirthday(new Date());monster.setMaritalStatus(false);Car car = new Car();car.setVehicleName("奔驰");car.setVehiclePrice(100000.0);monster.setCar(car);return monster;}
}

3.Postman测试.

在这里插入图片描述

4.Debug一下 monster对象如何以Json格式返回.

浏览器/Postman 请求, 第一个断点

在这里插入图片描述

第二个断点, 找到 AbstractJackson2HttpMessageConverter.class

在这里插入图片描述

在这里插入图片描述

用工厂模式创建了个 generator.

在这里插入图片描述

generator是 UTF8JsonGenerator

在这里插入图片描述

object 就是 monster对象

在这里插入图片描述

这条语句一旦执行完毕, 浏览器就拿到数据.

在这里插入图片描述

内容协商

基本介绍

1.根据客户端接收能力不同, SpringBoot返回不同媒体类型的数据.
JavaWeb系列八: WEB 开发通信协议(HTTP协议)

2.比如:
客户端Http请求, 携带 Accept aaplication/xml 请求头, 要求服务端返回xml数据;
客户端Http请求, 携带 Accept aaplication/json 请求头, 则要求服务端返回json数据

3.效果如下
如果Accept, 我设置的是 application/json, 那么返回的数据就是 json 格式.
在这里插入图片描述

如果Accept, 我设置的是 application/xml, 那么返回的数据就是 xml 格式.

在这里插入图片描述

应用实例

需求说明: 使用Postman发送Http请求, 根据请求头不同, 返回对应的json数据, 或者xml数据, 如图

在这里插入图片描述

注意: Accept: */* 默认返回 json 格式

在这里插入图片描述

在底层,generator生成的是xml格式的, 但是在进行转换的时候, 需要有一个jar包的依赖.

<!--引入处理xml的依赖-->
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.12.4</version>
</dependency>

debug源码

Postman切换不同的Accept类型, 来Debug源码, 看看对应的JsonGenerator类型

1,返回json类型

在这里插入图片描述

contentType进行内容协商

在这里插入图片描述

在这里插入图片描述

2.返回xml类型

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

在这里插入图片描述

优先返回xml

加入xml依赖以后, 使用浏览器请求,为什么会返回xml数据, 而不是json?

分析
(1)浏览器请求后, 后端接收到的contentType值是 application/xhtml+xml, 为什么?

(2)因为请求头信息, 如下
1.Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8

2.application/xhtml+xml 的权重比较高0.9, 后面的类型, 包括 */* 的权重是 0.8

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意事项和细节

1.Postman可以通过修改Accept的值, 来访会不同的数据格式.

2.对于浏览器, 我们无法修改其Accept的值, 怎么办? 解决方案: 开启基于请求参数的内容协商功能.

1)修改application.yml, 开启基于请求参数的内容协商功能.

spring:mvc:contentnegotiation:favor-parameter: true #开启基于请求参数的内容协商功能

在这里插入图片描述

2)浏览器测试

在这里插入图片描述

3)注意, 参数format是规定好的, 在开启请求参数的内容协商功能后, SpringBoot底层ParameterContentNegotiationStrategy会通过format来接收参数, 然后返回对应的媒体类型/数据格式, 当然format=xx这个xx 媒体类型/数据格式 是SpringBoot可以处理的才行, 不能乱写.

在这里插入图片描述

4)修改parameterName

spring:mvc:contentnegotiation:favor-parameter: true #开启基于请求参数的内容协商功能parameter-name: helloFormat #指定一个内容协商的参数名

5)测试

在这里插入图片描述


🔜 下一篇预告: [即将更新,敬请期待]


📚 目录导航 📚

  1. springboot系列一: springboot初步入门
  2. springboot系列二: sprintboot依赖管理
  3. springboot系列三: sprintboot自动配置
  4. springboot系列四: sprintboot容器功能
  5. springboot系列五: springboot底层机制实现 上
  6. springboot系列六: springboot底层机制实现 下
  7. springboot系列七: Lombok注解,Spring Initializr,yaml语法
  8. springboot系列八: springboot静态资源访问,Rest风格请求处理
  9. springboot系列九: 接收参数相关注解
  10. springboot系列十: 自定义转换器,处理JSON,内容协商

💬 读者互动 💬
在学习 Spring Boot 自定义转换器、处理 JSON 及内容协商的过程中,您有哪些新的发现或疑问?欢迎在评论区留言,让我们一起讨论吧!😊


http://www.15wanjia.com/news/4467.html

相关文章:

  • 网站统计代码添加百度小说搜索风云榜
  • 国家企业信息系统公示查询福州seo网址优化公司
  • 如何在微信创建公众号长沙网站优化公司
  • 庆阳市建设工程网上投标网站怎么建网站教程图解
  • 制作网站怎么做的十个有创意的线上活动
  • 毕设做网站需要买域名么网站代运营多少钱一个月
  • 网站建设友链交换武汉seo招聘
  • 饭店的网站建设进行评价北京官网优化公司
  • wordpress上传限制seo外链平台
  • 设计一套企业网站设计报价短视频运营方案策划书
  • 怎么知道网站程序是什么做的南宁百度seo公司
  • 电子商务怎么做网站iis搭建网站
  • 寻找长沙网站建设互联网营销推广渠道
  • 网站被快照被劫持wordpress苏州关键词seo排名
  • 安装wordpress it worksseo的优化策略有哪些
  • dw做静态网站seo怎么弄
  • 什么网站做全景效果图好免费换友情链接
  • 电商网站开发平台上海专业的网络推广
  • 百度免费网站建设怎样做网站平台
  • 专门做熟妇的网站深圳全网营销方案
  • 网站编辑如何做网站关键词排名怎么优化
  • 济南网站的建设seow是什么意思
  • 网页网站设计公司排名社会新闻最新消息
  • 宣讲家网站 政治建设农村电商平台有哪些
  • 自己做公司网站成本长沙全网覆盖的网络推广
  • 石家庄网站优化推广招商外包公司
  • 免费网站后台模板下载网站seo标题是什么意思
  • 免费域名注册发卡网长春关键词优化公司
  • 网站公司怎么做推广方案广告接单平台有哪些
  • 湖州 网站建设公司计算机培训机构排名前十