【问题标题】:Receiving JSON Response接收 JSON 响应
【发布时间】:2013-08-26 04:14:14
【问题描述】:

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

【问题讨论】:

    标签: java json tomcat jersey


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您不需要@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 正文中的特定歌曲

      【讨论】:

        【解决方案3】:

        路径参数将传入的 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 p>

        @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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 2016-10-25
          相关资源
          最近更新 更多