【问题标题】:How parse JSON and set as Object Model如何解析 JSON 并设置为对象模型
【发布时间】:2019-11-08 01:49:25
【问题描述】:

我有一个具有 2 种不同响应的 API:

回复OK

{ "name": "test" }

回应KO

[
    {
        "name_1": "test",
        "name_2": "test"
    }
]

问题是使用Retrofit,通常我使用模型来解析结果但是响应KO没有数组名称。

如何创建模型? (我无法更改 API)

【问题讨论】:

  • 您可以使用两种不同的模型。
  • 使用 Retrofit 我可以使用 2 种不同的模型吗? Retrofit 只能接受 1 个响应模型...
  • 当然。您只需像使用第一个 POJO 一样将您的第二个 POJO 添加到改造客户端。
  • 一般我用Call<CLASSMODEL> login(@Body HashMap<String, String> body);如何设置2个模型?
  • 您是否使用 Gson 序列化/反序列化您的 Json 数据?

标签: retrofit2 jsonschema2pojo


【解决方案1】:

所以要添加另一个 POJO,您可以这样做:


private static Gson gson = new GsonBuilder()

 .registerTypeAdapter(Model1.class, new GsonDeserializer<Model1>())


 .registerTypeAdapter(Model2.class, new GsonDeserializer<Model2>())

//or  create a POJO for the names array of Model2
.registerTypeAdapter(Model2.class, new GsonDeserializer<Names>())

其中GsonDeserializer是可以定义的自定义序列化器,比如:

public class GsonDeserializer<T> implements JsonDeserializer<T> {

@Override

public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {

 JsonObject el = json.getAsJsonObject();

 return new Gson().fromJson(el, typeOfT);

}

然后在您的 Retrofit 客户端中添加:


retrofit = new Retrofit.Builder()

.addConverterFactory(GsonConverterFactory.create(gson))

.build();


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多