Gson转炉厂改造2。序列化/反序列化中的不同类型

时间:2016-03-23 18:07:23

标签: java php gson retrofit2 wordpress-rest-api

我正在使用wordpress post metas和rest api,我已经接触了一个名为" picture_collection"将数据存储为整数数组,其中每个数字代表附件的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)用户制作图片并上传她,他作为交换接收存储在整数ArrayList内的附件的ID。 2)当他完成程序更新后,将post_meta传递给api整个列表。 3)程序接收响应作为包含我的自定义字段的整个帖子的json,它看起来像这样:

{...
   "id":"someValue",
   "title":"myTitle",
   "pic_collection":[ {'ID':'picID','mediumSizePic':'someUrl', 'FullSizePic':'SomeOtherUrl},{...}],

PHP代码运行良好,因为我从ResponseBody看到我期待的json,问题是我得到一个错误&gson期望一个整数并找到一个对象'这是合乎逻辑的,因为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; ID期待一个int但是找到了一个对象&#39;并且根本没有返回链接。 设置id的代码的一瞥:

iterator=idList.iterator;
while(iterator.hasNext()){
 FotoCollection fc = new FotoCollection();
 fc.ID = iterator.next

我该怎么做才能解决问题?我需要一个自定义转换器?

1 个答案:

答案 0 :(得分:0)

我刚创建了2个对象: 一个用于请求,一个用于响应。