我必须将 pojo 发布到仅通过表单数据接受参数的服务器( MediaType.APPLICATION_FORM_URLENCODED )。我知道jersey客户端可以将对象转换为xml,json和其他类型但是尝试转换为APPLICATION_FORM_URLENCODED会给出一个异常,表明没有指定类型的正文编写器可用。
有没有办法将对象序列化为application_form_urlencoded MultivaluedMap,或者我必须手动获取属性属性以形成结果MultivaluedMap?根据问题上下文,创建适配器以使用泽西序列化似乎不适合我。
要发布的对象
@XmlRootElement
public class POSTableObject {
private int a;
private String b;
public int getA() { return a; }
public void setA(int a) { this.a = a; }
public String getB() { return b; }
public void setB(String b) { this.b = b; }
}
使用Jersey客户端发布操作
ClientResponse response = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, postableObject);
答案 0 :(得分:4)
JAX-RS提供商只需要为application/x-www-form-urlencoded
提供MultivaluedMap<String,String>
的映射。而且我很确定开箱即用的Jersey不会提供从application/x-www-form-urlencoded
到常规POJO的额外映射器。您可以编写自己的客户端提供程序,但根据您需要执行此操作的频率,将POJO字段自己映射到URL字段可能更简单。
答案 1 :(得分:1)
您可以这样做,但首先您必须基于表格(javax.ws.rs.core.Form)创建一个实体(javax.ws.rs.client.Entity),该表格映射服务所需的参数:
Form input = new Form();
input.param("first_parameter", "value");
input.param("second_parameter", "value");
Entity<Form> entity = Entity.entity(input, MediaType.APPLICATION_FORM_URLENCODED);
ClientResponse response = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED).accept(MediaType.APPLICATION_JSON).post(entity);