【问题标题】:How disable Gson deserilization from Number to String如何禁用从数字到字符串的 Gson 反序列化
【发布时间】:2020-10-28 14:57:33
【问题描述】:

我有课

class X {
String a;
String b;
}

我使用gson对对象X进行反序列化:

new Gson().fromJson("{\"a\": 123, \"b\": 456}", X.class);

及其工作。我如何禁用 Num 到字符串的转换?我想得到例外。

【问题讨论】:

    标签: java gson deserialization


    【解决方案1】:

    您需要实现并注册自定义类型适配器:

    class StrictStringTypeAdapter extends TypeAdapter<String> {
        @Override
        public String read(JsonReader in) throws IOException {
            JsonToken peek = in.peek();
            if (peek == JsonToken.NULL) {
                in.nextNull();
                return null;
            }
    
            if (peek != JsonToken.STRING) {
                throw new JsonParseException("Non-string token!");
            }
            return in.nextString();
        }
    
        @Override
        public void write(JsonWriter out, String value) throws IOException {
            out.value(value);
        }
    }
    

    您可以将其用作:

    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import com.google.gson.JsonParseException;
    import com.google.gson.TypeAdapter;
    import com.google.gson.stream.JsonReader;
    import com.google.gson.stream.JsonToken;
    import com.google.gson.stream.JsonWriter;
    
    import java.io.IOException;
    
    public class GsonApp {
        public static void main(String[] args) {
            Gson gson = new GsonBuilder()
                    .registerTypeAdapter(String.class, new StrictStringTypeAdapter())
                    .create();
            X coordinates = gson.fromJson("{\"a\": 123, \"b\": 456}", X.class);
        }
    }
    

    上面的代码打印:

    Exception in thread "main" com.google.gson.JsonParseException: Non-string token!
        at com.example.StrictStringTypeAdapter.read(GsonApp.java:33)
        at com.example.StrictStringTypeAdapter.read(GsonApp.java:23)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      相关资源
      最近更新 更多