我在项目中使用Retrofit,并且需要一些自定义反序列化以及我使用的API返回的某些响应。
仅作为示例:我收到类似JSON的
{ "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 gson = new GsonBuilder().registerTypeAdapter(Result.class, new ResultDeserializer()).create();
注意:这个问题的意思是规范/常见问题解答,它是由我一年一次需要此信息时很难找到的一个启发。因此,如果该示例似乎是虚假的和愚蠢的,那仅仅是因为它应该很简单。希望这对其他人也有帮助
答案 0 :(得分:0)
解决方案是在构建Gson
客户端时注册自定义的Retrofit
。因此,在像所讨论的那样使用自定义Gson
自定义JsonDeserializer
之后:
Gson customGson = new GsonBuilder()
.registerTypeAdapter(Result.class, new ResultDeserializer())
.create();
在Gson
的帮助下,需要在构建阶段向Retrofit
注册此GsonConverterFactory
实例:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://localhost:8080/rest/")
.addConverterFactory(GsonConverterFactory.create(customGson))
.build();