【问题标题】:JAX-RS cant get XML response type from GET methodJAX-RS 无法从 GET 方法获取 XML 响应类型
【发布时间】:2017-12-20 20:38:53
【问题描述】:

我正在使用 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 {

【问题讨论】:

  • 请将代码包含为文本和不是图像。谢谢。
  • 好的,你有什么办法解决我的问题吗?

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


【解决方案1】:

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

以下代码示例显示了这是如何完成的:

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

如果媒体类型application/xmlapplication/json 是可接受的,则将调用doGetAsXmlOrJson 方法。如果两者都同样可以接受,则会选择前者,因为它首先出现。

更多信息请参见link

【讨论】:

  • 感谢您的回答。不幸的是,这就是我正在做的事情,但它不起作用......两个 get emthods 都已经准备好生成 xml 和 json。但它只做出 json 响应,而 XML 响应是空的子项(参见控制台输出的屏幕截图)
  • 尝试在您的 Song 类中添加 @XmlRootElement 注释。
  • 已经完成抱歉没有包括在内。我现在要添加它
【解决方案2】:

我不知道我是否得到了答案,但它以某种方式开始给出 id 而不是空的 xml 子项。我已将 getId 方法从私有先前的 jsut 设置为 public,以查看它是否做了一些事情并且它确实做了(!!!!)

所以我将 Song-class 中的所有 get 和 set 方法设置为 public,它现在可以工作了。

这有意义吗?如果是,请详细说明,因为我现在很困惑为什么它现在可以工作......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多