Java 如何禁用从数字到字符串的Gson反序列化

Java 如何禁用从数字到字符串的Gson反序列化,java,gson,deserialization,Java,Gson,Deserialization,我有课 class X { String a; String b; } 我将gson用于对象X的反序列化字符串: new Gson().fromJson("{\"a\": 123, \"b\": 456}", X.class); 以及它的工作。如何禁用Num到字符串的转换?我想获取异常。您需要实现并注册自定义类型适配器: class StrictStringTypeAdapter extends TypeAdapter<Str

我有课

class X {
String a;
String b;
}
我将gson用于对象X的反序列化字符串:

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

以及它的工作。如何禁用Num到字符串的转换?我想获取异常。

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

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);
    }
}
以上代码打印:

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)
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)