Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当通过Apollo客户端从Android应用程序发送请求时,GraphQL服务器返回422错误_Android_Spring Boot_Graphql_Apollo_Graphql Java - Fatal编程技术网

当通过Apollo客户端从Android应用程序发送请求时,GraphQL服务器返回422错误

当通过Apollo客户端从Android应用程序发送请求时,GraphQL服务器返回422错误,android,spring-boot,graphql,apollo,graphql-java,Android,Spring Boot,Graphql,Apollo,Graphql Java,嗨,我一直在尝试设置一个简单的Android应用程序,将查询发送到通过Springboot在本地主机上设置的GraphQL服务器。如果我不使用应用程序发送请求,无论是通过GraphiQL还是Postman,一切都很好,我绝对没有问题。只有当我通过Apollo客户端在应用程序中发送请求时,我才会收到422错误 我在Springboot中设置了日志语句,它托管GraphQL服务器来记录有效负载 这是Springboot中定义的模式 type Query { bookById(id: ID): B

嗨,我一直在尝试设置一个简单的Android应用程序,将查询发送到通过Springboot在本地主机上设置的GraphQL服务器。如果我不使用应用程序发送请求,无论是通过GraphiQL还是Postman,一切都很好,我绝对没有问题。只有当我通过Apollo客户端在应用程序中发送请求时,我才会收到422错误

我在Springboot中设置了日志语句,它托管GraphQL服务器来记录有效负载

这是Springboot中定义的模式

type Query {
  bookById(id: ID): Book 
}

type Book {
  id: ID
  name: String
  pageCount: Int
  author: Author
}

type Author {
  id: ID
  firstName: String
  lastName: String
}
以下是AndroidStudio中定义的查询,供Apollo客户端使用

query BookById($id : ID) {
    bookById(id : $id){
      name
      author{
        firstName
        lastName
      }
}}
以下是Android Studio中的代码

public类MainActivity扩展了AppCompatActivity{
私有静态最终字符串BASE_URL=”http://xxx.xxx.xxx.xxx:8080/graphql"; 
私有静态最终字符串TAG=“MainActivity”;
私有文本视图文本框;
私人按钮查询按钮;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textBox=(TextView)findViewById(R.id.plainbox);
queryButton=(按钮)findViewById(R.id.queryButton);
OkHttpClient OkHttpClient=新建OkHttpClient.Builder().build();
ApolloClient=ApolloClient.builder()
.serverUrl(基本URL)
.okHttpClient(okHttpClient)
.build();
//要向GraphQLAPI发出请求,必须使用实例
//由Apollo生成的查询或变异类的。
输入id=Input.fromNullable(“book-1”);
BookByIdQuery bq=BookByIdQuery.builder()
.id(“第1册”)
.build();
queryButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Log.d(标记“注册点击”);
Log.d(标记“Book Query:+bq.queryDocument());
apolloClient.query(bq).enqueue(新建)
ApolloCall.Callback(){
@凌驾
public void onResponse(@NotNull com.apollographql.apollo.api.Response-dataResponse){
d(标记“Got Response:\n”+dataResponse.toString());
//更改UI必须在UI线程上
textBox.setText(dataResponse.data().toString());
}
@凌驾
public void onFailure(@NotNull异常a){
Log.d(标记“失败,异常”+a);
}
});//结束客户端查询
}
});
}
这是我通过GraphiQL或Postman发出请求时在服务器端得到的日志

DEBUG 13749 --- [nio-8080-exec-8] o.s.w.f.CommonsRequestLoggingFilter      : Before request [uri=/graphql]
这是应用程序中阿波罗发出请求时的日志

DEBUG 13749 --- [io-8080-exec-10] o.s.w.f.CommonsRequestLoggingFilter      : Before request [uri=/graphql]

DEBUG 13749 --- [io-8080-exec-10] o.s.w.f.CommonsRequestLoggingFilter      : REQUEST DATA : uri=/graphql;payload={"operationName":"BookById","variables":{"id":"book-1"},"query":"query BookById($id: ID) {  bookById(id: $id) {    __typename    name    author {      __typename      firstName      lastName    }  }}"}]
这个问题可能与Apollo正在添加的_typename属性有关吗?或者可能是因为“id”在服务器端模式中被定义为一个简单参数,但在查询的Android Studio定义中是一个变量

我只是希望收到的回复不会有任何问题,因为它似乎以其他方式工作。即使我在我的web浏览器中手动输入查询,我也不会有问题获得正确的响应,只有在G̶r̶a̶p̶h̶Q̶L̶Android Studio中与Apollo客户端一起工作时,才会出现这个问题,我完全不知道为什么。我感谢人们能提供的任何帮助。提前谢谢

更新:再看一看,当通过Apollo客户端发送查询时,它会将查询作为对象而不是JSON字符串发送。现在我认为这可能是422错误的原因。我还读到,允许GraphQL服务器接受JSON字符串之外的对象是我必须启用的。我不是真的这么认为当然,如何做到这一点,那么有Spring Boot经验的人对我如何做到这一点有什么建议吗?谢谢