关于springboot:Spring-ContentNegotiation内容协商之使用篇一
原文转载
https://lequ7.com/guan-yu-springbootspringcontentnegotiation-nei-rong-xie-shang-zhi-shi-yong-pian-yi.html
背景
随着业务零碎的成熟,如果你的我的项目正好是公司的中台策略之一,然而上游零碎的接管形式不对立,这一种状况在一些老的公司零碎架构总经常出现,如果上游零碎不不便兼容,那么就须要中台零碎对外提供各种不同格局返回报文
内容协商
简略说就是服务提供方依据客户端所反对的格局来返回对应的报文,在 Spring 中,REST API 基本上都是以 json 格局进行返回,而如果须要一个接口即反对 json,又反对其余格局,开发和保护多套代码显然是不合理的,而 Spring 又恰好提供了该性能,那便是ContentNegotiation
在 Spring 中,决定一个数据是以 json、xml 还是 html 的形式返回有三种形式,别离如下:
1:favorPathExtension 后缀模式,例如:xxx.json,xxx.xml
2:favorParameter format模式,例如:xxx?format=json,xxx?format=xml,
3:通过申请的 Accept 来决定返回的值
在这三种模式中,后面两种模式都是敞开,如果须要关上,能够通过以下形式来开启
- 1:重写 WebMvcConfigurer(Spring5.X当前举荐的实现类) 的 configureContentNegotiation 来设置为 true 即可
- 2:设置 spring.mvc.contentnegotiation.favor-path-extension=true 或者 pring.mvc.contentnegotiation.favor-parameter=true
tips:如果是应用 Spring2.X以上的版本,不要开启 @EnableWebMvc 注解,否则会导致你的配置有效,如果须要开启该注解,则只能应用办法一重写 WebMvcConfigurer 了
三种模式
1:favorPathExtension 后缀模式
server:port: 8081
spring:mvc:contentnegotiation:favor-path-extension: truemedia-types:json: application/json
favor-path-extension 示意是否开启后缀匹配,media-types 示意后缀以何种形式进行解析,在这里须要留神一下肯定是须要有对应的 HttpMessageConvert 能力解析,否则是会提醒 406 Could not find acceptable representation
在 Spring 中曾经默认含有json解析的 HttpMessageConvert,所以是能够间接解析的,如果须要反对解析 xml,能够引入 xml 包
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId>
</dependency>
当开启了后缀模式当前,返回的文本类型会依据你的入参做不同的解决,.json 会返回 json 格局的数据,.xml 会返回 xml 格局的数据,当然也能够自定义一个 HttpMessageConverter 来自定义的返回文本格式
GET localhost:8081/controller/advice/decrypt.json{"name": "a","age": 1,"date": null
}GET localhost:8081/controller/advice/decrypt.xml<Advice><name>a</name><age>1</age><date/>
</Advice>
2:favorParameter
这种模式下是通过在 url 中通过一个参数来辨别如何解析的,spring中曾经默认这个关键字是 format
批改配置文件如下:
server:port: 8081
spring:mvc:contentnegotiation:favor-parameter: true
GET localhost:8081/controller/advice/decrypt?format=json{"name": "a","age": 1,"date": null
}GET localhost:8081/controller/advice/decrypt?format=xml<Advice><name>a</name><age>1</age><date/>
</Advice>
当然也能够本人批改 parameter 的关键字,只须要在配置文件中调整下即可
parameter-name: meida_type
此时再次申请的时候 parameter 就须要调整为 meida_type,否则就会以默认的形式去解析返回的文本信息
Accept解析
这种就是默认的一种解析形式,无需进行任何配置,Spring 就是默认以这种模式进行解析的
GET申请
XML申请
关于springboot:Spring-ContentNegotiation内容协商之使用篇一相关推荐
- Spring之定时任务基本使用篇
文章链接:https://liuyueyi.github.io/hexblog/2018/08/01/180801-Spring之定时任务基本使用篇/ Spring之定时任务基本使用篇 spring- ...
- SpringBoot + Spring Security 简单入门
这篇文章主要介绍了SpringBoot + Spring Security 简单入门 Spring Security 基本介绍 这里就不对Spring Security进行过多的介绍了,具体的可以参考 ...
- 玩转 SpringBoot 2 快速整合 | RESTful Api 篇
概述 RESTful 是一种架构风格,任何符合 RESTful 风格的架构,我们都可以称之为 RESTful 架构.我们常说的 RESTful Api 是符合 RESTful 原则和约束的 HTTP ...
- 告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目(实际项目开发的浓缩精华版)
告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目 一.前言 二.如何选择版本 2.1 SpringCloud 和 Spring Boot 版本选型 2.1. ...
- spring之旅第四篇-注解配置详解
spring之旅第四篇-注解配置详解 一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会 ...
- Spring思维导图,让Spring不再难懂(aop篇)
2019独角兽企业重金招聘Python工程师标准>>> 什么是aop AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Or ...
- spring boot实战(第六篇)加载application资源文件源码分析
前言 在上一篇中了解了spring配置资源的加载过程,本篇在此基础上学习spring boot如何默认加载application.xml等文件信息的. ConfigFileApplicationLis ...
- 【笔记】springboot+spring security登录流程实现
在登录控制器中添加一个登录接口login,在其中验证验证码.用户名.密码信息.匹配成功之后,执行Spring Security的登录认证机制.登录成功之后,返回Token令牌凭证. SysLoginC ...
- eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇
Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...
- Spring思维导图,让Spring不再难懂(cache篇)
转载自 Spring思维导图,让Spring不再难懂(cache篇) 关于缓存 缓存是实际工作中非常常用的一种提高性能的方法.而在java中,所谓缓存,就是将程序或系统经常要调用的对象存在内存中,再次 ...
最新文章
- 面试题:请用代码实现ip地址与int之间互换?
- JSON Web Token - 在Web应用间安全地传递信息
- MTCNN人脸及特征点检测---代码应用详解c++
- COLING 2020 | CharBERT:字符敏感的预训练语言模型
- 使用pm2启动node文件_PM2 是什么
- NP、OSPF 缺省路由
- php输出单行,file - php如何随机输出文件内一行?
- 线性回归 T检验P值计算
- 地铁视频监控系统中无线监控技术的应用
- 服务器运行时间设置,服务器的时间同步设置方法
- 针对面试官提出的WPF逻辑树和视觉树
- small team
- HOS Develop Notes-开启ssh服务
- Ubuntu虚拟机中网络中没有网卡
- 网络协议与网络编程(双电脑串口通讯)
- 奇点临近:人工智能让人类变成软件,并迅速统治宇宙
- Hihocoder-H国的身份证号码I
- 文思海辉 墨尔本_团结墨尔本
- 使用python解决数独问题
- Android Textview缩进之悬挂缩进
热门文章
- my97日期范围限制
- python计算梯形面积程序编程解题思路_编写程序计算梯形面积
- Pandas 之DataFrame二维表基础操作及演示
- DXP PCB板的形状的改变
- 【论文阅读】A Memory-Efficient Deterministic Finite Automaton-Based Bit-Split String Matching Scheme
- 计算机毕业设计情况进展记录表,南京理工大学泰州科技学院毕业设计(论文)进展情况记录表.doc...
- 【笔记】Robust High-Resolution Video Matting with Temporal Guidance
- 【板栗糖GIS】Win11如何取消打印机任务
- 共享硬盘没有权限访问计算机,win7系统访问磁盘共享没有权限的解决方法
- 使用canvas标签绘制圆形、三角形