我能';t使用graphql java上载文件
Im尝试用java graphql上传文件。我研究了这个主题的解决方案: 我使用的是graphql java 11.0版、graphql spring boot starter 5.0.2版、graphql java kickstart 7.5.0版我能';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
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>