我正尝试再次执行GraphQL
查询,再次是SWAPI端点
https://api.graphcms.com/simple/v1/swapi
使用改造
我的Retrofit API类似于
@Headers("Content-Type: application/json")
@POST("swapi")
Single<Response<String>> query(@Body final String query);
我的改造服务
public class StarWarsService extends BaseService implements StarWarsApi {
private static final String BASE_URL = "https://api.graphcms.com/simple/v1/";
private static final StarWarsApi INSTANCE = new StarWarsService();
/**
*
* @return
*/
public static StarWarsApi instance() {
return INSTANCE;
}
private final StarWarsApi service;
/**
*
*/
private StarWarsService() {
final Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL).client(okHttpClient)
.addCallAdapterFactory(Java8CallAdapterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create()).build();
service = retrofit.create(StarWarsApi.class);
}
@Override
public Single<Response<String>> query(String query) {
return service.query(query);
}
}
我的主要方法
private static final String QUERY_STAR_WARS_0001 = "{ \"query\": \"{Starship(name:\"Millennium Falcon\") { name, hyperdriveRating, pilots(orderBy: height_DESC) { name, height, homeworld {name} } }}\" }";
public static void main(String[] args) {
StarWarsService.instance().query(QUERY_STAR_WARS_0001).subscribe();
}
我收到以下日志
Sep 19, 2018 3:54:01 PM okhttp3.internal.platform.Platform log
INFO: --> POST https://api.graphcms.com/simple/v1/swapi
Sep 19, 2018 3:54:01 PM okhttp3.internal.platform.Platform log
INFO: Content-Type: application/json
Sep 19, 2018 3:54:01 PM okhttp3.internal.platform.Platform log
INFO: Content-Length: 145
aSep 19, 2018 3:54:01 PM okhttp3.internal.platform.Platform log
INFO:
Sep 19, 2018 3:54:01 PM okhttp3.internal.platform.Platform log
INFO: { "query": "{Starship(name:"Millennium Falcon") { name, hyperdriveRating, pilots(orderBy: height_DESC) { name, height, homeworld {name} } }}" }
Sep 19, 2018 3:54:01 PM okhttp3.internal.platform.Platform log
INFO: --> END POST (145-byte body)
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: <-- 400 https://api.graphcms.com/simple/v1/swapi (325ms)
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: content-type: text/plain; charset=UTF-8
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: content-length: 291
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: date: Wed, 19 Sep 2018 14:54:39 GMT
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: server: akka-http/10.0.8
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: via: 1.1 cd9298825de9a9f64f66b3bc944bdd09.cloudfront.net (CloudFront), 1.1 3965285cac2a9323992ecbe26f94d453.cloudfront.net (CloudFront)
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: x-cache: Error from cloudfront
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: x-amz-cf-id: u17uzCW9lF5XI0o4_7hd5OatIqZshrKTlnX0G9iZWHb3CsJ8_Hobww==
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO:
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: The request content was malformed:
Unexpected character 'M' at input index 28 (line 1, position 29), expected '}':
{ "query": "{Starship(name:"Millennium Falcon") { name, hyperdriveRating, pilots(orderBy: height_DESC) { name, height, homeworld {name} } }}" }
^
Sep 19, 2018 3:54:02 PM okhttp3.internal.platform.Platform log
INFO: <-- END HTTP (291-byte body)
何时可以使用在线GraphQL“浏览器”执行相同的查询,确定吗?
我的代码/方法犯了什么错误?
答案 0 :(得分:2)
无论生成JSON对象的任何代码,都无法正确地在json值内转义“字符。
{ "query": "{Starship(name:"Millennium Falcon") { name, hyperdriveRating, pilots(orderBy: height_DESC) { name, height, homeworld {name} } }}" }
应该是
{ "query": "{Starship(name:\"Millennium Falcon\") { name, hyperdriveRating, pilots(orderBy: height_DESC) { name, height, homeworld {name} } }}" }