使用自定义表单键将POJO映射到application/x-www-form-urlencoded

flo*_*ian 6 java mapping robospice spring-android

我正在使用RoboSpice和Spring Android来执行REST api调用.需要将Content-Type设置为application/x-www-form-urlencoded发送数据.

假设我有一个像这样的Pojo类:

public class Pojo {
  private String pojoAttribute;

  // getter + setter
}
Run Code Online (Sandbox Code Playgroud)

这是我的请求类:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,假设我需要发送这个主体:
pojo_attribute = foo

现在我的代码不起作用,因为FormHttpMessageConverter不处理POJO.

我希望能做的是这样的:

public class Pojo {
  @FormProperty("pojo_attribute")
  private String pojoAttribute;

  // getter + setter
}
Run Code Online (Sandbox Code Playgroud)

使用一个神奇的HttpMessageConverter将我的POJO转换为key = value格式,通过检查@FormProperty(不存在)注释将pojoAttribute转换为pojo_attribute,就像Jackson对@JsonProperty一样.

我的问题是:
- 是否可以使用现有的类/注释来做到这一点?
- 还有另一种做类似事情的方法吗?
- 如果我创建自己的HttpMessageConverter和一组注释来做这件事会不会有点过分?