zoukankan      html  css  js  c++  java
  • Gson使用技巧

    1. CharMatcher

    String serviceUrl = CharMatcher.is('/').trimTrailingFrom(ConfigHelper.metaServiceUrl()) + "/storage/query?appid=" + ConfigHelper.appId() + "&feature=1";

    2. Precondition

    Preconditions.checkArgument(!Strings.isNullOrEmpty(namespace), "参数namespace不能为空");

    3. JsonParser

     1 JsonObject content = new JsonParser().parse(response).getAsJsonObject();
     2 int status =content.get("status").getAsInt();
     3 if (status != 200)
     4     throw new Exception("加载meta信息出现异常,status:" + status);
     5 for (JsonElement jsonElement : content.get("result").getAsJsonArray()) {
     6     JsonObject item = jsonElement.getAsJsonObject();
     7     StorageInfo storage = new StorageInfo();
     8     String namespace = item.get("namespace").getAsString().toLowerCase();
     9     storage.setStorageName(item.get("storageName").getAsString());
    10     storage.setStorageType(StorageType.fromId(item.get("storageType").getAsInt()));
    11     result.put(namespace, storage);
    12 }

    4. Strings

    Strings.isNullOrEmpty(namespace)

    5. 对于bean 中有部分属性需要忽略

    解决方案:(使用ExclusionStrategy)

    创建注解类 Exclude

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    public @interface Exclude {
    }

    在gson中配置 忽略带有Exclude的属性:

    Gson gson = new GsonBuilder()
                    .setExclusionStrategies(new ExclusionStrategy(){
                    @Override
            public boolean shouldSkipField(FieldAttributes f) {
                return f.getAnnotation(Exclude.class) != null;
            }
    
            @Override
            public boolean shouldSkipClass(Class<?> clazz) {
                return false;
            }
    })

    使用时在需要忽略的属性上标记@Exclude 即可:

    class Mock{
        String name;
        String age;
        @Exclude
        String gender;
    }

     ------------------------

    指定哪些是要暴露转换的属性

    @Expose  
    private Integer businessId;  

    但这个时候要用

    Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
    BusinessSystem bus = (BusinessSystem) (gson.fromJson(data,
    BusinessSystem.class));

    6. 自定义序列化字段名字

    @SerializedName("email_address")
    public String emailAddress;

    7. 泛型在Gson中的使用

    //数组
    String jsonss = "["aa","bb","cc"]";  
    String[] ss = gson.fromJson(jsonss, String[].class);  
    for (String s:ss) {  
          Log.i(TAG,s);  
    }  
    String s = gson.toJson(ss);  
    Log.i(TAG,s);
    
    //List
    List<String> list=gson.fromJson(jsonss, new TypeToken<List<String>>() {}.getType());
    List<User> list=gson.fromJson(jsonss, new TypeToken<List<User>>() {}.getType());
    //也就是说,GSON把json转换为JAVA泛型对象的时候,要先定义好
    //Type collectionType = new TypeToken<GenericModel<Integer>>(){}.getType() 
  • 相关阅读:
    Linux系统操作问题汇总
    记录一些mysql数据库常用操作命令和问题汇总
    python学习之路-练习小程序02(模拟用户登录)
    python学习之路02(基础篇2)
    python学习之路-练习小程序01(猜年龄)
    python学习之路01(基础篇1)
    hashmap详解(基于jdk1.8)
    maven创建项目太慢怎么办
    CAS原理
    JUC原子类3-AtomicLongArray原子类
  • 原文地址:https://www.cnblogs.com/ylz8401/p/7264493.html
Copyright © 2011-2022 走看看