Я делаю нативное приложение Android, которое отправляет запросы с помощью Retrofit2 к API WooCommerce и получает ответы JSON, сопоставляющие их с классами моделей (POJO) с помощью GSON. Я использую плагин в Android Studio, который автоматически генерирует POJO из JSON ответов.
При отправке запросов в API W C некоторые конечные точки имеют такие ответы:
"meta_data": [
{
"id": 2881,
"key": "wc_productdata_options",
"value": [
{
"_bubble_new": "\"yes\"",
"_bubble_text": "معجون أسنان",
"_custom_tab_title": "معجون أسنان Oral-B",
"_custom_tab": "",
"_product_video": "",
"_product_video_size": "",
"_product_video_placement": "",
"_top_content": "",
"_bottom_content": ""
}
]
},
{
"id": 3077,
"key": "_wp_page_template",
"value": "default"
}
]
Атрибут value
может быть либо String
, либо List<Value>
, но плагин POJO определяет value
как только List<Value>
Так что при разборе ответа я получаю сообщение об ошибке GSON expects BEGIN_ARRAY but got STRING instead
, когда он достигает "value" : "default"
.
Как я могу представить, что value
может быть строкой ИЛИ списком в классе модели.
Вот автоматически сгенерированный POJO meta_data
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class MetaDatum {
@SerializedName("id")
private Long mId;
@SerializedName("key")
private String mKey;
@SerializedName("value")
private List<Value> mValue;
public Long getId() {
return mId;
}
public void setId(Long id) {
mId = id;
}
public String getKey() {
return mKey;
}
public void setKey(String key) {
mKey = key;
}
public List<Value> getValue() {
return mValue;
}
public void setValue(List<Value> value) {
mValue = value;
}
}