2017-09-27 12 views
0

私は以下のコードを持っています。 catalogにあるすべてのドキュメントをjsonレスポンスとして返したいと思います。 DBCursorを使用してすべての文書を印刷できます。MongoDbからJerseyを使用してJsonの応答を送信してください

@Path("/allmusic") 
public class GetAllMusic { 

    @Produces(MediaType.APPLICATION_JSON) 
    @GET 
    public void getAllSongs(@Context HttpHeaders httpHeaders) throws UnknownHostException { 

     DB db = (new MongoClient("localhost",27017)).getDB("sampledb"); 
     DBCollection dbCollection = db.getCollection("catalog"); 

     DBCursor cursor = dbCollection.find(); 

     while(cursor.hasNext()) 
     { 
      System.out.println(cursor.next()); 
     } 
    } 


} 

どのようにすべてのドキュメントをjsonレスポンスとして返すことができますか?私の質問がばかげている場合は、私はまだ初心者です。このURLにアクセスするには

GetAllMusic.java

@Path("/allmusic") 
    public class GetAllMusic { 
     @GET 
     @Produces(MediaType.APPLICATION_JSON) 
     @Path("/playlist") 
     public Response getAllSongs(@Context HttpHeaders httpHeaders) 
     throws UnknownHostException, JsonProcessingException { 

       DB db = (new MongoClient("localhost",27017)).getDB("xmusicdb"); 
       DBCollection dbCollection = db.getCollection("catalog"); 

       DBCursor cursor = dbCollection.find(); 

       List<CatalogPojo> result = new ArrayList<>(); 
       while(cursor.hasNext()) { 
        result.add(new CatalogPojo(cursor.next())); 
       } 
       String json = new ObjectMapper().writeValueAsString(result); 
       return Response.ok(json, MediaType.APPLICATION_JSON).build(); 
      } 

     } 

CatalogPojo.java

public class CatalogPojo { 

    private String title, artist, album, year; 


    /*CatalogPojo(String title, String artist, String album, String year){ 

    }*/ 

    public CatalogPojo(DBObject next) { 

    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getArtist() { 
     return artist; 
    } 

    public void setArtist(String artist) { 
     this.artist = artist; 
    } 

    public String getAlbum() { 
     return album; 
    } 

    public void setAlbum(String album) { 
     this.album = album; 
    } 

    public String getYear() { 
     return year; 
    } 

    public void setYear(String year) { 
     this.year = year; 
    } 
} 

http://localhost:xxxx/xmusic/allmusic/playlistを私は取得しています:私は、コードに以下の追加を行いました

EDIT 404.私のpojoファイルに何か問題があると思うか、List<CatalogPojo>

答えて

0

@ SOlssonソリューションは優れていますが、次のコードでは行数が少なくても問題は解決します。それは有効なjson文字列で応答します。

@Path("/allmusic") 
public class GetAllMusic { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("/playlist") 
    public Response getAllSongs(@Context HttpHeaders httpHeaders) throws UnknownHostException { 


     DB db = (new MongoClient("localhost",27017)).getDB("musicdb"); 
     DBCollection dbCollection = db.getCollection("catalog"); 
     DBCursor cursor = dbCollection.find(); 

     JSON json =new JSON(); 
     @SuppressWarnings("static-access") 
     String serialize = json.serialize(cursor); 
     System.out.println(serialize); 

     return Response.ok(serialize, MediaType.APPLICATION_JSON).build(); 
    } 
} 
2

あなたはほぼあります。これを試してみてください:

その後
@Path("v1") 
public class GetAllMusic { 
    @GET 
    @Path("/allmusic") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response getAllSongs { 
     ... 
     List<AppropriatePojo> result = new ArrayList<>(); 
     while(cursor.hasNext()) { 
      result.add(new AppropriatePojo(cursor.next())); 
     } 
     String json = new ObjectMapper().writeValueAsString(result); 
     return Response.ok(json, MediaType.APPLICATION_JSON).build(); 
    } 

アクセスはlocalhost:XXXX/V1 /オールミュージックのどちらかお使いのブラウザでまたはthje Chormeプラグイン郵便配達と。

+0

ありがとうございました。 とは何ですか? – user3787635

+1

Pojo =普通の古いJavaオブジェクト。あなたが戻したいプロパティを持つちょうどJavaクラス。あなたのカーソルに何が入っているのか分かりませんが、人の名前と年齢のリストを返します。次に、(private)int変数ageと(private)String変数名を持つPojo(つまり単純なJavaクラス)を作成します。セッターとゲッター(Eclipseはあなたのためにそれを行うことができます)をそれぞれ追加します(合計4つのメソッド)。あなたはPojoを持っています。次に、オブジェクトを初期化するのが容易になるように、名前と年齢パラメータを取るコンストラクタを追加できます。 –

+0

私は404エラーが発生しています。私はpojoファイルに何か問題があると確信しています。ありがとう。 – user3787635

関連する問題