展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

自定义内容协商策略

  • 在浏览器搜索框中输入的方式只有format=json和format=xml,我们希望输入format=gg时,服务器能使用我们自定义的内容协商x-guigu

那么我们需要在配置类中配置如下,这时在浏览器搜索框中输入format=gg即可响应x-guigu类型的数据
序号1处是自定义的协商策略,有可能我们添加的自定义的功能会覆盖默认很多功能,导致一些默认的功能失效,
这里我们自定义了序号1处基于参数的协商策略,导致基于请求的协商策略失效(此时postman中测试发现失效),
解决方案是将序号2处的基于请求头的协商策略添加进来,这时postman测试也能成功
  • 实现代码
@Configuration(proxyBeanMethods = false)
public class WebConfig {
//1、WebMvcConfigurer定制化SpringMVC的功能
@Bean
public WebMvcConfigurer webMvcConfigurer(){
return new WebMvcConfigurer() {
/**
* 自定义内容协商策略
* @param configurer
*/
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
//Map<String, MediaType> mediaTypes
Map<String, MediaType> mediaTypes = new HashMap<>();
mediaTypes.put("json",MediaType.APPLICATION_JSON);
mediaTypes.put("xml",MediaType.APPLICATION_XML);
mediaTypes.put("gg",MediaType.parseMediaType("application/x-guigu")); # 自定义的协商策略 1
//指定支持解析哪些参数对应的哪些媒体类型;接收的参数为 Map<String, MediaType> mediaTypes
ParameterContentNegotiationStrategy parameterStrategy = new ParameterContentNegotiationStrategy(mediaTypes);
// 基于请求头的协商策略
HeaderContentNegotiationStrategy headeStrategy = new HeaderContentNegotiationStrategy();
// 将自定义策略和基于请求头的策略应用
configurer.strategies(Arrays.asList(parameterStrategy,headeStrategy));
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new GuiguMessageConverter());
}
};
}
}
posted @   DogLeftover  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示