Java 如何在改造中向Gson注册自定义TypeAdapter或JsonDeserializer?
我在我的项目中使用改型,我需要一些自定义反序列化,以及我使用的API返回的一些响应 举个例子:我收到的JSON如下:Java 如何在改造中向Gson注册自定义TypeAdapter或JsonDeserializer?,java,gson,retrofit,retrofit2,json-deserialization,Java,Gson,Retrofit,Retrofit2,Json Deserialization,我在我的项目中使用改型,我需要一些自定义反序列化,以及我使用的API返回的一些响应 举个例子:我收到的JSON如下: { "status": "7 rows processed" } (如果请求失败,将“处理0行”) 我需要反序列化到如下对象: @Getter @RequiredArgsConstructor public static class Result { private final boolean success; } 我已创建自定义反序列化程序: public clas
{ "status": "7 rows processed" }
(如果请求失败,将“处理0行”)
我需要反序列化到如下对象:
@Getter
@RequiredArgsConstructor
public static class Result {
private final boolean success;
}
我已创建自定义反序列化程序:
public class ResultDeserializer implements JsonDeserializer<Result> {
@Override
public Result deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
return new Result( ! json.getAsJsonObject().get("status").getAsString().startsWith("0"));
}
}
注意:这个问题是一个典型的问答问题,它的灵感来自于我每年需要一次这个信息时很难找到这个问题。因此,如果这个例子看起来是人为的和愚蠢的,那只是因为它应该是简单的。希望这对其他人也有帮助解决方案是在构建
改造
客户端时注册定制的Gson
。因此,在使用customJsonDeserializer
定制了Gson
之后,如有疑问:
Gson customGson = new GsonBuilder()
.registerTypeAdapter(Result.class, new ResultDeserializer())
.create();
需要在GsonConverterFactory
的帮助下,在构建阶段将此Gson
实例注册到改造
:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://localhost:8080/rest/")
.addConverterFactory(GsonConverterFactory.create(customGson))
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://localhost:8080/rest/")
.addConverterFactory(GsonConverterFactory.create(customGson))
.build();