代码之家  ›  专栏  ›  技术社区  ›  jakub

改装+GSON不会序列化HashMap,GSON自己会

  •  0
  • jakub  · 技术社区  · 10 年前

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

    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 回复  |  直到 10 年前
        1
  •  0
  •   florian-do    10 年前

    如果这是您想要从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
    }
    

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

        2
  •  0
  •   jakub    10 年前

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