1

カスタムタイプのArrayListからJSON形式の出力を生成するRESTWebサービスがあります。

@GET()
@Produces("application/json")
@Path("/ratings")
public List<Rating> getRatings( ) {
Rating rating;
List<Rating> ratings = new ArrayList<Rating>();
rating= new Rating();
//here I set rating object
rating.setNote(...);
// etc....
ratings.add(rating);

//the method returns ratings arraylist
return ratings;

次のように、すべてのJSONデータに親メンバーを追加したいと思います。

{"ratings":[{"a":"1","b":"test"}]}

好きではない:

[{"a":"1","b":"test"}]

それをしてもいいですか?助けてくれてありがとう。

4

3 に答える 3

2

求めている JSONratingsは、配列またはRatingオブジェクトである単一のフィールド ( ) を含むオブジェクトです。POJO JSONサポートが有効になっていると思われる場合、それが必要な場合はそれを返す必要があります。

@XmlRootElement
class Response {
    public final List<Rating> ratings;

    public Resonse(List<Rating> ratings) {
        this.ratings = ratings;
    }
}

Responsethenのインスタンスを返すようにメソッド シグネチャを変更します。

return new Reponse(ratings);

ここにはかなり広範なガイドがあります

オプション B は、単純に JSON シリアル化を自分で行い、String(JSON) を返します。

于 2013-03-05T17:32:08.677 に答える
1

Jersey の直接オブジェクト マッピング機能を引き続き使用したい場合は、「評価」のリストを保持するオブジェクトを作成するのが最善の方法です。

それ以外の場合は、カスタム シリアライザーを作成できます。詳細については、この例を参照してください。

于 2013-03-05T17:24:31.247 に答える
0

それを試してみてください

@Provider
@Produces({MediaType.APPLICATION_JSON})
public class XJsonBodyWriter implements MessageBodyWriter<Object> {
    // implement methods
    public void writeTo(Object obj, Class<?> clazz, Type type,
        Annotation[] annotations, MediaType mediaType,
        MultivaluedMap<String, Object> map, OutputStream out)
        throws IOException, WebApplicationException {
        // serialize it how you want
    }
}
于 2013-03-05T17:33:34.707 に答える