接收JSON响应

时间:2013-08-23 07:31:29

标签: java json tomcat jersey

我正在尝试使用Jersey接收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;
}

在这种情况下,“Info”始终为null。我从服务器收到200响应,所以我知道正在发送JSON。唯一不确定的是,我应该用UTF-8发送JSON吗?

3 个答案:

答案 0 :(得分:0)

首先,您需要正确使用@PathParam。您需要在网址中指定{json}。查看example

UPD:我刚刚想到,在你的情况下,你根本不需要使用@PathParam。把它拿走它应该有效。

答案 1 :(得分:0)

您不需要@PathParam,因为JSON内容应该在POST正文中。您已将返回类型声明为 Room ,但是您是否尝试返回 Song 类型?假设这是一个简单的JSON包装字符串,内容在POST正文中,你想要在200 OK中返回 Song 然后你可以试试这个:

@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;
}

(可选)如果要在API中使用 Song 的JSON表示,可以将 String Info 替换为 Song newSong ,然后POST主体中的特定歌曲

答案 2 :(得分:0)

  

路径参数获取传入的URL并将路径的某些部分作为参数进行匹配。通过在@Path注释中包含{name},即资源   以后可以访问URI的匹配部分到路径参数   相应的“名称”。路径参数构成请求的一部分   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