我正在使用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。
我怎样才能让它成功?
编辑:@XmlRootElemnt标签当然已经全部添加到我的POJO_Bean Song.java中:
@XmlRootElement(name = "song")
public class Song {
答案 0 :(得分:1)
可以在同一@Produces
声明中声明多种媒体类型。
以下代码示例演示了如何完成此操作:
@Produces({"application/xml", "application/json"})
public String doGetAsXmlOrJson() {
...
}
如果媒体类型doGetAsXmlOrJson
和application/xml
中的任何一种都可以接受,则会调用application/json
方法。如果两者都同样可以接受,那么前者将被选中,因为它首先出现。
有关详细信息,请参阅link。
答案 1 :(得分:0)
我不知道我是否得到了答案,但它以某种方式开始发出id而不是空的xml孩子。我已经将getId方法设置为私有的jsut私有,以查看它是否真的如此,它确实(!!!!)
所以我把我的歌曲类中的所有get和set emthods设置为public并且它现在正常工作。
它有意义吗?如果是,请详细说明,因为我现在感到困惑,为什么它现在有效...