[英]Gson converter factory retrofit2. Different types in serialization/deserialization
我正在使用wordpress post metas和rest api,我已經准備好休息一個稱為“ picture_collection”的meta字段,該字段將數據存儲為整數數組,其中每個數字代表附件的ID。 然后,我在詢問api時修改了響應,以提供鏈接列表而不是附件ID,如下所示:
function get_pic_coll ($object, $field_name, $request) {
include_once dirname(__FILE__) . '/attach_coll.php';
$pic_coll = get_post_meta ($object['id'], $field_name, true);
$json_coll = array();
if($pic_coll != null || !empty($pic_coll)){
foreach ($pic_coll as $pic){
$media_id = $pic;
$link_med = wp_get_attachment_image_src($media_id, 'medium');
$link_full = wp_get_attachment_image_src($media_id, 'full');
$medium_size = $link_med[0];
$full_size = $link_full[0];
$obj = new attach_coll($media_id, $medium_size, $full_size);
$element = $obj->return_coll_object();
$json_coll[] = $element;
}
return $json_coll;
}
}
而attach_coll對象為:
class attach_coll{
public function __construct($media_id, $medium_url, $orig_url){
$this->attach_id = $media_id;
$this->medium_size_pic = $medium_url;
$this->full_size_pic = $orig_url;
}
private $attach_id;
private $medium_size_pic;
private $full_size_pic;
public function get_media_id(){
return $this->attach_id;
}
public function get_medium_pic(){
return $this->medium_size_pic;
}
public function get_orig_pic(){
return $this->full_size_pic;
}
public function return_coll_object(){
$ret_coll = array(
"ID" => $this->get_media_id(),
"medium" => $this->get_medium_pic(),
"full" => $this->get_orig_pic()
);
return $ret_coll;
}
}
Java方面的事情是這樣的:1)用戶制作一張圖片並將其上傳,他以交換的方式接收存儲在Integers ArrayList中的附件的ID。 2)當他完成程序后,更新post_meta並將整個列表傳遞給api。 3)程序以json的形式接收響應,其中包含帶有我的自定義字段的整個帖子,它看起來像這樣:
{...
"id":"someValue",
"title":"myTitle",
"pic_collection":[ {'ID':'picID','mediumSizePic':'someUrl', 'FullSizePic':'SomeOtherUrl},{...}],
php代碼運行良好,正如我從ResponseBody中看到的,我所期望的json一樣,問題是我遇到了一個錯誤,“ gson期望一個Integer並找到了一個對象”,這是合乎邏輯的,因為pojo的定義如下:
@SerializedName("pic_collection")
private List<Integer> idList = new ArrayList<Integer>();
public void setList(List<Integer> list){
this.idList=list;
}
我試圖將列表更改為:
List<PicCollection> picList = new ArrayList<PicCollection>();
public class PicCollection{
@SerializedName("ID")
private int picId;
@SerializedName("medium_size")
private String medSizeUrl;
@SerializedName("full_size")
private String fullSizeUrl;
Getters and Setters
}
但這只是使一切變得復雜,並且沒有解決問題,因為我仍然遇到相同的gson錯誤“ ID期望一個int但找到了一個對象”並且根本沒有返回鏈接。 簡要介紹設置ID的代碼:
iterator=idList.iterator;
while(iterator.hasNext()){
FotoCollection fc = new FotoCollection();
fc.ID = iterator.next
我該怎么解決這個問題? 我需要自定義轉換器?
我剛剛創建了2個對象:一個用於請求,一個用於響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.