我正在使用带有 Spring Android 的 RoboSpice 来执行 REST api 调用。数据需要在 Content-Type 设置为 application/x-www-form-urlencoded 的情况下发送。
假设我有一个像这样的 Pojo 类:
public class Pojo {
private String pojoAttribute;
// getter + setter
}
这是我的请求类:
public class PojoRequest extends AbstractApiRequest<PojoResult> {
private Pojo pojo;
public PojoRequest(Pojo pojo) {
super(PojoResult.class);
this.pojo = pojo;
}
@Override
public PojoResult loadDataFromNetwork() throws Exception {
HttpEntity<Pojo> requestEntity = new HttpEntity<Pojo>(pojo, getDefaultHeaders());
String url = buildUrlForPath("mypath");
RestTemplate restTemplate = getRestTemplate();
restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
return restTemplate.postForObject(url, requestEntity, PojoResult.class);
}
}
所以,假设我需要发送这个正文:
pojo_attribute=foo
现在我的代码不起作用,因为 FormHttpMessageConverter 不处理 POJO。
我想做的是这样的:
public class Pojo {
@FormProperty("pojo_attribute")
private String pojoAttribute;
// getter + setter
}
使用神奇的 HttpMessageConverter 将我的 POJO 转换为 key=value 格式,通过检查 @FormProperty(不存在)注释将 pojoAttribute 转换为 pojo_attribute,就像 Jackson 对 @JsonProperty 所做的那样。
我的问题是:
- 是否可以使用现有的类/注释来做到这一点?
- 还有其他方法可以做类似的事情吗?
- 如果我创建自己的 HttpMessageConverter 和一组注释来做到这一点,会不会有点矫枉过正?