使用 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(使用前将#替换为@)