- 在浏览器搜索框中输入的方式只有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());
}
};
}
}