改造+ GSON没有自己将HashMap序列化,GSON也是如此

时间:2016-02-01 15:32:56

标签: android rest gson retrofit

我的请求模型包含地图,看起来像

public class AddRequest {
public String url;
public String key;
public Map<String, String> attributes;

public AddProductToBasketRequest(String url, String key, Map<String, String> attributes) {
    this.url = url;
    this.key = key;
    this.attributes = attributes;
}

}

当我按

打印我的模型时
new Gson().toJson(request)

我有

{"url":"https://www.net-a-porter.com/lalala","attributes":{"size":"it34"},"key":"agtzfnNm"}

但是当我通过改造发送请求时,我在日志中有空属性

{"attributes": {}, "url": "https://www.net-a-porter.com/lalala", "key": "agtzfnNm"}   

我的RestAdapter看起来像

public RestAdapter restAdapter = new RestAdapter.Builder()
        .setRequestInterceptor(new RequestInterceptor() {
            @Override
            public void intercept(RequestFacade request) {
                request.addHeader("Access-Token", token;
            }
        })
        .setEndpoint(url)
        .setConverter(new GsonConverter(new GsonBuilder()
                .excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
                .serializeNulls()
                .create()))
        .build();

执行请求的代码看起来像

AddInterface restInterface = restAdapter.create(AddInterface.class);
restInterface.request(id, request, new Callback<Basket>() {
    @Override
    public void success(Basket basket, Response r) {
    }

    @Override
    public void failure(RetrofitError error) {
    }
});

2 个答案:

答案 0 :(得分:0)

如果这是您要从POST请求发送的内容

{"url":"https://www.net-a-porter.com/lalala","attributes":{"size":"it34"},"key":"agtzfnNm"}

你应该试试这个:

public class AddRequest {
public String url;
public String key;
public Attributes attributes;

public AddProductToBasketRequest(String url, String key, Attributes attributes) {
    this.url = url;
    this.key = key;
    this.attributes = attributes;
}

public class Attributes {
    protected String size;

    // getter & setter
}

因为{}应该是一个对象而[]一个列表

答案 1 :(得分:0)

问题只是在代码的另一部分清除了HashMap。