未找到媒体类型 = application/x-www-form-urlencoded 的球衣客户端 MessageBodyWriter

2023-12-27

使用 org.glassfish.jersey.core.jersey-client 版本 2.16 似乎无法发出简单的 POST 请求:

MessageBodyProviderNotFoundException:未找到媒体类型 = application/x-www-form-urlencoded 的 MessageBodyWriter

client

String response = ClientBuilder.newClient().target("http://0.0.0.0:8080")
        .path("/get")
        .request(MediaType.APPLICATION_JSON_TYPE)
        .post(Entity.entity(getForm(), MediaType.APPLICATION_FORM_URLENCODED_TYPE), String.class);

private Form getForm()
{
    return new Form() {{ this.param("whatever", "whatever"); }};
}

server

@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String postForToken(@FormParam("whatever") final String whatever) {...}

根据以下内容注册 MultiPartFeaturethis https://stackoverflow.com/questions/19668426/how-to-resolve-messagebodywriter-not-found-for-media-type-multipart-form-data-er帖子没有区别。

config.register(MultiPartFeature.class);

好的,线索就在完整的异常消息中(上面没有发布)。

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/x-www-form-urlencoded, type=class com.blah.AcceptanceTest$1, genericType=class com.blah.AcceptanceTest$1.

$1 表示它正在尝试解析某种内部类 - 这使我找到了 Form 的匿名子类。将以上更改为以下效果很好:

private Form getForm()
{
    final Form form = new Form();
    form.param("whatever", "whatever");
    return form;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未找到媒体类型 = application/x-www-form-urlencoded 的球衣客户端 MessageBodyWriter 的相关文章

随机推荐