1

resteasy を使用して安らかな Web サービスを開発しています。以前は、プロバイダーは jackson でした。
そして、結果出力は

[
    {
        "status": {
            "id": 22,
            "name": "VERIFY",
            "note": ""
        }
    },
    {
        "status": {
            "id": 23,
            "name": "ACCEPTED",
            "note": ""
        }
    },
    {
        "status": {
            "id": 24,
            "name": "POSTPONED",
            "note": "for cancel update"
        }
    },
    {
        "status": {
            "id": 29,
            "name": "AMC(NEW)"
        }
    },
    {
        "status": {
            "id": 30,
            "name": "AMC(ASSIGNED)"
        }
    }
]

その後、プロバイダーとして gson に移行しました。http://eclipsesource.com/blogs/2012/11/02/integrating-gson-into-a-jax-rs-based-application/

出力は次のように変化します。

[
    {
        "id": 0,
        "name": "DISABLE"
    },
    {
        "id": 1,
        "name": "ENABLE"
    },
    {
        "id": 31,
        "name": "REJECTED",
        "note": ""
    },
    {
        "id": 25,
        "name": "ASSIGNED"
    }
]

クラス定義

package com.apt.common.web.pojo;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Status {
    Integer id;
    String name;
    private String note;
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String toString(){
        return name;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Status other = (Status) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }

}

出来上がりが全然違います。

ジャクソンの使用

{
    "status": {
        "id": 22,
        "name": "VERIFY",
        "note": ""
    }
}

gsonを使用して

{
    "id": 0,
    "name": "DISABLE"
}

gson を使用して json を生成するコードは次のとおりです。

Gson gson=new Gson();

Type fooType = new TypeToken<List<Status>>() {}.getType();

return gson.toJson(statuses,fooType);

gson を使用して同じ出力を得るにはどうすればよいですか?

4

1 に答える 1