即使请求了 format=json,YQL 也会返回 application/javascript
Posted
技术标签:
【中文标题】即使请求了 format=json,YQL 也会返回 application/javascript【英文标题】:YQL returns application/javascript even when format=json is requested 【发布时间】:2015-03-28 03:50:25 【问题描述】:我正在尝试在 Spring Boot 应用程序中对 YQL 进行 REST 调用。即使我设置了“format=json”,调用也会返回“application/javascript”,这会导致以下消息:
org.springframework.web.client.RestClientException:无法提取响应:没有找到适合响应类型 [class com.dilteam.research.YqlQueryResult] 和内容类型 [application/javascript;charset=utf-8] 的 HttpMessageConverter /p>
这里是方法(processTicker)和相关的类(YqlQueryResult):
public void processTicker(String ticker)
RestTemplate restTemplate = new RestTemplate();
String query = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%3D'YHOO'&format=json&callback=?";
YqlQueryResult qr = restTemplate.getForObject(query, YqlQueryResult.class);
System.out.println("result" + qr.results);
@JsonIgnoreProperties(ignoreUnknown = true)
public class YqlQueryResult
public String results;
我做错了什么?
【问题讨论】:
【参考方案1】:您的RestTemplate
不知道如何阅读application/javascript
回复。假设 application/javascript
实际上是 JSON,您可以通过向您的 RestTemplate
添加适当配置的转换器来解决您的问题:
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(new MediaType("application", "javascript")));
restTemplate.getMessageConverters().add(javascriptConverter);
【讨论】:
new MediaType("application/javascript") 不起作用,所以我改为: new MediaType("application", "javascript") 现在得到: 由:com.fasterxml.jackson 引起。 core.JsonParseException:意外字符('/'(代码 47)):可能是(非标准)注释? (由于未为解析器启用功能“ALLOW_COMMENTS”,因此无法识别为一个)返回的 JSON 具有以下内容:/**/v("query":..... 为了解决“COMMENTS”问题,添加了以下行,但现在它返回一个 Null 对象:converter.getObjectMapper().configure(JsonParser.Feature.ALLOW_COMMENTS, true); 我得到 'Null' 的原因是表 'yahoo.finance.quotes' 在 YQL 上不再可用。诡异的。可能是雅虎!改变了它的政策!关闭这个问题。感谢安迪的指点。以上是关于即使请求了 format=json,YQL 也会返回 application/javascript的主要内容,如果未能解决你的问题,请参考以下文章
即使正确设置了 document.domain,跨子域 ajax 请求也会被拒绝
跨域请求被阻止:即使在我的 API 上启用了 CORS 后也会发生;