JAX-RS无法从GET方法获取XML响应类型

时间:2017-12-20 20:38:54

标签: java json xml web-services jax-rs

我正在使用JAX-RS构建基本的Web服务

这是GET方法:

    /**
 * Returns all songs
 * @return all songs
 */
@GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Collection<Song> getAllSongs() {
    return SongsRXStore.getInstance().getAllSongs();
}

/**
 * Returns song with id: "id"
 * @param id the "id"
 * @return song with id: "id"
 */
@GET
@Path("/{id}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response getSong(@PathParam("id") Integer id) {
    Song song = SongsRXStore.getInstance().getSongById(id);
    if (song != null)
        return Response.ok(song).build();
    else
        return Response.status(Response.Status.NOT_FOUND)
                .entity(Response.Status.NOT_FOUND + ": No Song found with id " + id).build();
}

看起来很好,但我无法恢复XML类型。

这里请求所有歌曲(上面的第一种方法)为json和xml。正如您所看到的,只有正确返回了json,而不是xml。 enter image description here

与仅请求一首特定歌曲相同(上面的第二种方法形式): enter image description here

我怎样才能让它成功?

编辑:@XmlRootElemnt标签当然已经全部添加到我的POJO_Bean Song.java中:

@XmlRootElement(name = "song")
public class Song {

2 个答案:

答案 0 :(得分:1)

可以在同一@Produces声明中声明多种媒体类型。

以下代码示例演示了如何完成此操作:

@Produces({"application/xml", "application/json"})
public String doGetAsXmlOrJson() {
    ...
}

如果媒体类型doGetAsXmlOrJsonapplication/xml中的任何一种都可以接受,则会调用application/json方法。如果两者都同样可以接受,那么前者将被选中,因为它首先出现。

有关详细信息,请参阅link

答案 1 :(得分:0)

我不知道我是否得到了答案,但它以某种方式开始发出id而不是空的xml孩子。我已经将getId方法设置为私有的jsut私有,以查看它是否真的如此,它确实(!!!!)

所以我把我的歌曲类中的所有get和set emthods设置为public并且它现在正常工作。

它有意义吗?如果是,请详细说明,因为我现在感到困惑,为什么它现在有效...