SpringBoot内容协商(Content Negotiation)二 —— 自定义消息转换器(MessageConverter)
SpringBoot内置的消息转换器

SpringBoot没有处理返回yaml格式的数据,这里需要手动添加处理这种返回格式的支持。
导入依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
添加配置
spring:
mvc:
contentnegotiation: # 内容协商
media-types:
yaml: application/yaml # 添加yaml格式返回支持
添加MessageConverter组件
public class MyYamlHttpMessageConverter extends AbstractHttpMessageConverter<Object> {
private ObjectMapper objectMapper = null;
public MyYamlHttpMessageConverter(){
//告诉SpringBoot这个MessageConverter支持哪种媒体类型 //媒体类型
super(new MediaType("application", "yaml", StandardCharsets.UTF_8));
YAMLFactory factory = new YAMLFactory()
.disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER);
this.objectMapper = new ObjectMapper(factory);
}
@Override
protected boolean supports(Class<?> clazz) {
//只要是对象类型,不是基本类型
return true;
}
//@RequestBody 接受参数为yaml格式,不处理
@Override
protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
return null;
}
//@ResponseBody 把对象怎么写出去
@Override
protected void writeInternal(Object o, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
//try-with写法,自动关流
try(OutputStream os = outputMessage.getBody()){
this.objectMapper.writeValue(os,o);
}
}
}
增加HttpMessageConverter组件,专门负责把对象写出为yaml格式
@Configuration
public class MyConfig {
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MyYamlHttpMessageConverter());
}
};
}
}
参考
[1] https://www.yuque.com/leifengyang/springboot3/wp5l9qbu1k64frz1#VHQfh
[2] https://springdoc.cn/spring-boot/web.html#web.servlet.spring-mvc.message-converters
[3] https://docs.spring.io/spring-boot/docs/current/reference/html/web.html#web.servlet.spring-mvc.message-converters
SpringBoot内容协商(Content Negotiation)二 —— 自定义消息转换器(MessageConverter)的更多相关文章
- Spring MVC Content Negotiation 转载
Spring MVC Content Negotiation 2017年11月15日 00:21:21 carl-zhao 阅读数:2983 Spring MVC有两种方式生成output的方法: ...
- Content Negotiation(内容协商)
Asp.Net Web API 2第十四课——Content Negotiation(内容协商) 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http:// ...
- Content Negotiation in ASP.NET Web API
本文描述Web API实现内容协商(content negotiation). The HTTP specification (RFC 2616) defines content negotiatio ...
- WebApi2官网学习记录---Content Negotiation
Content Negotiation的意思是:当有多种Content-Type可供选择时,选择最合适的一种进行序列化并返回给client. 主要依据请求中的Accept.Accept-Charset ...
- Content Negotiation using Spring MVC
There are two ways to generate output using Spring MVC: You can use the RESTful @ResponseBody approa ...
- springboot快速入门(二)——项目属性配置(日志详解)
一.概述 application.properties就是springboot的属性配置文件 在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring ...
- springboot 学习笔记(二)
springboot 学习笔记(二) 快速创建一个springboot工程,并引入所需要的依赖 1.利用Spring initializr 来创建一个springboot项目,登陆http://sta ...
- SpringBoot添加自定义消息转换器
首先我们需要明白一个概念:springboot中很多配置都是使用了条件注解进行判断一个配置或者引入的类是否在容器中存在,如果存在会如何,如果不存在会如何. 也就是说,有些配置会在springboot中 ...
- Asp.Net Web API 2第十四课——Content Negotiation(内容协商)
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...
- springboot自定义消息转换器HttpMessageConverter
在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制就是利用HttpMessageCo ...
随机推荐
- Q:浏览器不能上网,但是可以ping通外网ip,dns配置也没问题(TCP/IP 无法建立传出连接)
问题症状 每隔一段时间,浏览器不能访问外网,重启电脑又正常,重置网卡无效 可以ping通外网ip地址,可以ping通外网域名 ping不通外网端口端口 查看日志 每次出现不能上网情况时都会有至少两条T ...
- Atcoder ABC389E Square Price 题解 [ 蓝 ] [ 二分 ] [ 贪心 ]
Square Price:垃圾卡精度,垃圾卡精度,垃圾卡精度,傻逼出题人,傻逼出题人,傻逼出题人,傻逼出题人,傻逼出题人,傻逼出题人,傻逼出题人. 把 ll 改 __int128 前 WA*22,改 ...
- DeepSeek+PageAssist实现本地大模型联网
技术背景 在前面的几篇博客中,我们分别介绍过在Ubuntu上部署DeepSeek.在Windows上部署DeepSeek.使用AnythingLLM构建本地知识库的方法,其中还包含了ChatBox的基 ...
- K230学习记录
K230学习记录 参考自: # 立创·庐山派-K230-CanMV开发板资料与相关扩展板软硬件资料官网全部开源 # 开发板官网:www.lckfb.com # 技术支持常驻论坛,任何技术问题欢迎随时交 ...
- ML树构建简明教程
数据准备 Teamviewer登录实验室服务器,访问http://172.17.128.86:8501/CleanData,按照页面对应的格式要求分别从NCBI和GISAID数据库下载数据,拖拽到对应 ...
- 基于标签值分布的强化学习推荐算法(Reinforcement Learning Recommendation Algorithm Based on Label Value Distribution)
前言 看论文的第三天,坚持下去. 慢慢来,比较快. -- 唐迟 本文基于2023年6月28日发表在MATHEMATICS上的一篇名为"基于标签值分布的强化学习推荐算法"(Reinf ...
- 牛逼了!16.2K Star!推荐一款开源的网络爬虫和浏览器自动化库:Crawlee!
在当今的互联网世界中,网络爬虫作为一种重要的工具,被广泛应用于数据收集.内容监控.SEO优化以及自动化测试等多个领域.随着技术的不断进步,各种开源的网络爬虫库也应运而生.今天,我向大家推荐一款非常优秀 ...
- ITSS 运维2.0 实践
最近公司在评审itss 2.0,参与了一部分工作,对工作过程中的问题梳理如下: 大的背景:评审itss 2.0会有评审 为什么公司会申请各种资质 首次申请资质后,公司可以申请一笔费用(x万元)! 申请 ...
- Mysql join算法深入浅出
导语 联表查询在日常的数据库设计中非常的常见,但是联表查询可能会带来性能问题,为了调优.避免设计出有性能问题的SQL,在explain命令中,会显示用的是哪个join算法,学习一下join过程是非常有 ...
- Win10下子系统Unbuntu18.04安装nginx
1.Nginx的软件包在Ubuntu默认软件仓库中可用. 安装非常简单,只需键入以下命令: sudo apt update sudo apt install nginx 2.安装完成后,检查Nginx ...