6

我正在使用带有 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 和一组注释来做到这一点,会不会有点矫枉过正?

4

0 回答 0