Spring引导和Jersey javax.ws.rs.ProcessingException:没有可用的MessageBodyWriter

时间:2017-10-20 02:30:42

标签: spring-boot jersey

尝试使用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));

1 个答案:

答案 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