尝试使用Spring Boot和Jersey来调用REST Client。 但遇到了问题
javax.ws.rs.ProcessingException: No available MessageBodyWriter for class "class org.glassfish.jersey.media.multipart.file.FileDataBodyPart" and media type "multipart/mixed"
尝试使用Jersey版本2.6 确保我已注册MultiPartFeature
Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build();
需要在HTTP请求中发送multipart / mixed作为内容类型。 任何其他想法或帮助将不胜感激。
MultiPart正文的示例代码
MultiPart multiPartEntity = new MultiPart()
.bodyPart(new BodyPart(new FormDataBodyPart("XXXX", payload),
javax.ws.rs.core.MediaType.TEXT_XML_TYPE))
.bodyPart(new BodyPart(new FileDataBodyPart("YYYYY",file), j
javax.ws.rs.core.MediaType.APPLICATION_OCTET_STREAM_TYPE));
答案 0 :(得分:0)
类“FileDataBodyPart”
没有可用的MessageBodyWriter
您不能使用while(true) { System.out.printf("What is %d times %d?%n", varFirst, varSecond); answer = input.nextInt(); if (varFirst * varSecond != answer) { System.out.printf("No. Please try again%n"); return;} }
作为实体正文。它必须是FileDataBodyPart
,您可以添加 MultiPart
。例如
FileDataBodyPart
不确定你做错了什么,但这是我测试过的完整代码(使用Jersey Test Framework)。我根据OP的注释更改了下面的代码以使用FileDataBodyPart filePart = new FileDataBodyPart("test", new File("test.txt"));
MultiPart multiPart = new FormDataMultiPart()
.bodyPart(filePart);
Response response = ClientBuilder.newClient()
.register(MultiPartFeature.class)
.target(url)
.request()
.post(Entity.entity(multiPart, "multipart/mixed"));
而不是MultiPart
,但无论哪种方式,请求仍然以多部分/混合内容类型发送,因为这是我明确设置的使用FormDataMultiPart
。
Entity