java - 如何正确为FormDataMultiPart提供MessageBodyWriter

标签 java maven jersey mailgun

我正在使用 MIME 消息正文测试 mailgun api。Mailgun 在 https://documentation.mailgun.com/api-sending.html#examples 提供了一个 api 示例。

当我使用我的配置运行示例时,我收到一条如下所示的 java 错误消息。

Exception in thread "main" org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/x-www-form-urlencoded, type=class org.glassfish.jersey.media.multipart.FormDataMultiPart, genericType=class org.glassfish.jersey.media.multipart.FormDataMultiPart.
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:247)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130)
at org.glassfish.jersey.client.ClientRequest.doWriteEntity(ClientRequest.java:517)
at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:499)
at org.glassfish.jersey.client.internal.HttpUrlConnector._apply(HttpUrlConnector.java:393)
at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:285)
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:252)
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684)
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681)
at com.mioying.chat.util.MailGunClient.sendEmail(MailGunClient.java:44)
at com.mioying.chat.util.MailGunClient.main(MailGunClient.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

这是我对该项目的 Maven 依赖项。

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.25.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.25.1</version>
    </dependency>

我还需要将哪些其他库包含到项目中?或者我需要额外的步骤来注册提供商吗?

最佳答案

  1. 您正在尝试使用application/x-www-form-urlencoded。这不是多部分的 mime 类型。您应该只从 FormDataMultiPart 获取媒体类型,因为它还会添加边界

    post(Entity.entity(mutliPart, multiPart.getMediaType()));
    
  2. 您需要向Client注册MultiPartFeature

    Client client = ClientBuilder.newClient();
    client.register(MultiPartFeature.class);
    

请参阅 this post 中的完整示例

关于java - 如何正确为FormDataMultiPart提供MessageBodyWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43445376/

相关文章:

java - 如何获取 Java Jersey 客户端请求的 URL?

java - 界面中的 JAX-RS 验证消息

java - spring security 从同一个ip地址多次登录

java - 如何使用 Mac 的 java_home 在同一版本的 AdoptOpenJDK 和 AzulOpenJDK 之间进行选择?

java - 在 Eclipse 中运行 wicket 项目时绑定(bind)异常

java - 未找到 .classpath 和 .project

java - Jersey - 尽管非空初始化,资源变量仍为空值

java - 检测 ActiveMQ 主题的使用者的变化

java - 停止网络接收器线程

maven - 如何在 SpringBoot 应用程序测试上下文中使用来自测试 application.yml 的 spring 数据源设置的参数实例化 groovy.sql.Sql?