2013-08-23 152 views
0

我想用Jersey接收JSON響應,但它總是發送null。以下是我的服務代碼:接收JSON響應

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
     MediaType.TEXT_XML }) 
@Path("/songs/") 
public Room AddSong(@PathParam("json") String Info) { 
    Song newSong = new newSong(); 
    newSong.addSong(Info); 
    return newSong; 
} 

在這種情況下,「信息」始終爲空。我收到來自服務器的200響應,所以我知道JSON正在發送。我唯一不知道的其他事情是,我是否應該以UTF-8發送JSON?

回答

0

首先,您需要正確使用@PathParam。你需要在你的url中指定{json}。看看example

UPD:這只是發生在我身上,你在你的情況下你根本不需要使用@PathParam。只要把它拿走,它應該工作。

0

由於JSON內容應該位於POST正文中,因此不需要@PathParam。您已聲明返回類型爲房間,但是您是否嘗試返回類型歌曲?假設這是一個簡單的JSON裹串,內容是在POST身體,你想返回的200 OK,那麼你可以試試這個:

@POST 
Consumes(MediaType.APPLICATION_JSON) 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML }) 
@Path("/songs/") 
public Song AddSong(String Info) { 
    Song newSong = new newSong(); 
    newSong.addSong(Info); 
    return newSong; 
} 

可選,如果你想使用JSON API中的表現,你可以在POST體取代字符串信息宋newSong然後具體

0

路徑參數將傳入的URL和路徑的各部分作爲參數進行匹配。通過將{name}包含在@Path註釋中,資源 可以稍後訪問URI的匹配部分,並將路徑參數與 對應的「名稱」相關聯。路徑參數使請求 URL的部分作爲參數,這可以將請求參數 信息嵌入到簡單URL中。

@Path("/books/{bookid}") 
public class BookResource { 
    @GET 
    public Response invokeWithBookId(@PathParam("bookid") String bookId) { 
     /* get the info for bookId */ 
     return Response.ok(/* some entity here */).build(); 
    } 

    @GET 
    @Path("{language}") 
    public Response invokeWithBookIdAndLanguage(@PathParam("bookid") String bookId, @PathParam("language") String language) { 
     /* get the info for bookId */ 
     return Response.ok(/* some entity here */).build(); 
    } 
} 

在你休息的代碼參數Info取值從@Path("/songs/{json}")但你必須指定@Path("/songs/")所以json永遠是null

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
     MediaType.TEXT_XML }) 
@Path("/songs/") 
public Room AddSong(@PathParam("json") String Info) { 
    Song newSong = new newSong(); 
    newSong.addSong(Info); 
    return newSong; 
} 

你不喜歡這樣,然後一切將罰款:​​

@POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
      MediaType.TEXT_XML }) 
    @Path("/songs/{json}") 
    public Room AddSong(@PathParam("json") String Info) { 
     Song newSong = new newSong(); 
     newSong.addSong(Info); 
     return newSong; 
    } 

欲瞭解更多信息請參考JAX-RS Parameters