如何禁用从数字到字符串的 Gson 反序列化
How disable Gson deserilization from Number to String
我有class
class X {
String a;
String b;
}
我使用 gson 将字符串反序列化为对象 X:
new Gson().fromJson("{\"a\": 123, \"b\": 456}", X.class);
及其作品。我如何禁用 Num 到 String 的转换?我想得到例外。
您需要实现并注册自定义类型适配器:
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)
我有class
class X {
String a;
String b;
}
我使用 gson 将字符串反序列化为对象 X:
new Gson().fromJson("{\"a\": 123, \"b\": 456}", X.class);
及其作品。我如何禁用 Num 到 String 的转换?我想得到例外。
您需要实现并注册自定义类型适配器:
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)