我能';t使用graphql java上载文件

我能';t使用graphql java上载文件,java,graphql,postman,Java,Graphql,Postman,Im尝试用java graphql上传文件。我研究了这个主题的解决方案: 我使用的是graphql java 11.0版、graphql spring boot starter 5.0.2版、graphql java kickstart 7.5.0版 public class PartDeserializer extends JsonDeserializer { @Override public Part deserialize(JsonParser p, Deserializatio

Im尝试用java graphql上传文件。我研究了这个主题的解决方案: 我使用的是graphql java 11.0版、graphql spring boot starter 5.0.2版、graphql java kickstart 7.5.0版

public class PartDeserializer extends JsonDeserializer {

  @Override
  public Part deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {

    return null;
  }

  @Bean
  public ObjectMapper objectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    SimpleModule module = new SimpleModule();
    module.addDeserializer(Part.class, new PartDeserializer());
    objectMapper.registerModule(module);
    return objectMapper;
  }
}
我的查询来自邮递员的数据

operations
{ "query": "mutation($files: [Upload!]!) {testMultiFilesUpload(files:$files)}", "variables": {"files": [null,null] } }

map
{ "file0": ["variables.files.0"] , "file1":["variables.files.1"]}

file0
0.jpeg
file1
1.jpeg
这是服务器响应

INFO 11663 --- [0.1-1100-exec-7] g.servlet.AbstractGraphQLHttpServlet     : Bad POST multipart request: no part named "graphql" or "query"
我做错了什么?我建议你用阿波罗


它使用RxJava集成、改造、订阅和对AutoValue的支持。这将使您的工作更轻松,因为在为GraphQL构建查询和解析响应方面没有直接的方法。

您可以尝试以下依赖项:

<properties>
        <graphql-java.version>13.0</graphql-java.version>
        <graphql-java-kickstart-springboot.version>5.10.0</graphql-java-kickstart-springboot.version>
        <graphql-java-kickstart-tools.version>5.6.1</graphql-java-kickstart-tools.version>
        <graphql-java-kickstart-servlet.version>8.0.0</graphql-java-kickstart-servlet.version>
</properties>

 <dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>5.9.0</version>
 </dependency>
 <dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-java-tools</artifactId>
    <version>5.6.1</version>
 </dependency>
 <dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphiql-spring-boot-starter</artifactId>
    <version>5.6.0</version>
 </dependency>

13
5.10.0
5.6.1
8.0.0
com.graphql-java-kickstart
graphql弹簧启动机
5.9.0
com.graphql-java-kickstart
graphql java工具
5.6.1
com.graphql-java-kickstart
graphiql弹簧启动机
5.6.0

但是graphql文件上传有一个问题,我们不能删除graphql生成的临时文件,因为它总是被graphql使用,并且文件流没有关闭

谢谢你的建议。请告诉我,我能用阿波罗而不用格拉德尔吗?我目前正在使用Maven。我看到Apollo需要发送文件,我必须在build.gradle文件中定义这个映射。在maven项目中如何做到这一点?是的,您可以在不使用gradle的情况下使用apollographql客户端。检查这个答案你的GraphQLJava版本是11.0,它不支持文件上传谢谢你的答案。我还有一个问题。当我试图通过邮递员发送文件时。我收到这样一条消息:~~~“消息”:“获取数据时出现异常(/testMultiFilesUpload):找不到类java.io.FileDescriptor的序列化程序,也找不到创建BeanSerializer的属性(为了避免异常,请禁用空bean上的SerializationFeature.FAIL_)(通过引用链:java.util.ArrayList[0]->org.apache.catalina.core.ApplicationPart[\'inputStream\']->java.io.FileInputStream[\'fd\'])“~~~~怎么了?在PartDeserializer.classobjectMapper.configure中禁用它(SerializationFeature.FAIL\u ON\u EMPTY\u bean,false);这段代码应该避免失败,但它看起来好像不起作用。对不起,我的错误,我忘记了注释@Component。如何更改保存路径?“保存路径”是指您的存储路径?您需要处理文件流,这是您的选择,我帮不了您
operations
{ "query": "mutation($files: [Upload!]!) {testMultiFilesUpload(files:$files)}", "variables": {"files": [null,null] } }

map
{ "file0": ["variables.files.0"] , "file1":["variables.files.1"]}

file0
0.jpeg
file1
1.jpeg
INFO 11663 --- [0.1-1100-exec-7] g.servlet.AbstractGraphQLHttpServlet     : Bad POST multipart request: no part named "graphql" or "query"
<properties>
        <graphql-java.version>13.0</graphql-java.version>
        <graphql-java-kickstart-springboot.version>5.10.0</graphql-java-kickstart-springboot.version>
        <graphql-java-kickstart-tools.version>5.6.1</graphql-java-kickstart-tools.version>
        <graphql-java-kickstart-servlet.version>8.0.0</graphql-java-kickstart-servlet.version>
</properties>

 <dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>5.9.0</version>
 </dependency>
 <dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-java-tools</artifactId>
    <version>5.6.1</version>
 </dependency>
 <dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphiql-spring-boot-starter</artifactId>
    <version>5.6.0</version>
 </dependency>