强制Spring RestTemplate忽略响应的内容类型标头

ohfgkhjo  于 2022-12-28  发布在  Spring
关注(0)|答案(2)|浏览(168)

我尝试向我不控制的服务器发出GET请求,该请求在Content-Type头中返回了一个无效值:“应用程序/json;字符集="。
当我尝试执行GET调用时,Spring在尝试解析这个值时抛出InvalidMimeTypeException,因为它正确地期望在=符号后面应该有一个实际的字符集。

restTemplate.getForObject(new URI(DATASOURCE), String.class); // throws InvalidMimeTypeException when attempting to parse response

是否可以配置RestTemplate忽略响应中返回的任何内容类型头?我无法控制正在查询的服务器。(Spring-Boot 2.2.0.RELEASE)

org.springframework.http.InvalidMediaTypeException: Invalid mime type "Application/json; charset=": 'value' must not be empty
    at org.springframework.http.MediaType.parseMediaType(MediaType.java:574) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.http.HttpHeaders.getContentType(HttpHeaders.java:966) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.web.client.HttpMessageConverterExtractor.getContentType(HttpMessageConverterExtractor.java:135) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:92) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:744) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:717) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:336) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
scyqe7ek

scyqe7ek1#

您实现了一个自定义的HttpMessageConverter。这里是一个example。我想您可以重用JSON转换器并注册自定义内容类型。

efzxgjgh

efzxgjgh2#

抱歉回答延迟,我回答,所以当一个搜索相关问题的解决方案,它可以作为参考。
除了converter应答,你应该用HttpMessageConverter扩展一个ResponseExtractor,并在那里覆盖getContentType,因为RestTemplate execute方法首先检查响应的内容类型,如果不能解析,也会在那里抛出异常,所以Converter和Extractor都应该存在。

相关问题