2013-08-23 149 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