0

我正在尝试接收带有 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;
}

在这种情况下,“信息”始终为空。我收到来自服务器的 200 响应,所以我知道正在发送 JSON。我唯一不确定的是,我应该以 UTF-8 格式发送 JSON 吗?

4

3 回答 3

0

路径参数将传入的 URL 和路径的匹配部分作为参数。通过在 @Path 注释中包含 {name},资源可以稍后访问 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 参数

于 2013-08-23T12:35:34.947 回答
0

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

UPD:我刚刚想到,在您的情况下,您根本不需要使用@PathParam。把它收起来,它应该可以工作。

于 2013-08-23T07:54:34.500 回答
0

您不需要 @PathParam,因为 JSON 内容应该在 POST 正文中。您已将返回类型声明为Room,但您不尝试返回类型Song吗?假设这是一个简单的 JSON 包装字符串,内容在 POST 正文中,并且您希望Song在 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;
}

或者,如果您想在 API 中使用Song的 JSON 表示,您可以将String Info替换为Song newSong,然后在 POST 正文中使用特定的Song 。

于 2013-08-23T07:57:08.130 回答