Jersey REST (GET) throwing MessageBodyWriter not found for media type=application/xml

Posted

技术标签:

【中文标题】Jersey REST (GET) throwing MessageBodyWriter not found for media type=application/xml【英文标题】: 【发布时间】:2019-03-02 07:10:35 【问题描述】:

我使用 Jersey 开发了一个 REST 服务 (GET)。我想将响应作为 application/xml 返回。 当我注释以下内容时出现异常,而当我将其更改为 MediaType.APPLICATION_JSON 时,服务工作并将响应作为 JSON 返回。 @得到 @Produces(MediaType.APPLICATION_XML)

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/xml

许多博客建议包含对 jersey-media-jaxb 的依赖项,但我有另一个服务成功返回 XML 响应而没有该依赖项。唯一的区别是服务是一个 POST 端点,而当前不工作的是一个 GET 端点。

【问题讨论】:

您可以使用“邮递员”并更改请求类型来检查问题,您可以发布代码摘录吗? 模型是否标注@XmlRootElement?模型类是否有无参数构造函数?两者都是必需的 嗨@Paul Samsotha,我得到了一个XSD 文件,当我用它们生成模型类时,它们只包含以下注释。 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "getCustomerResponse", propOrder = "_return" ) 没有 XmlRootElement 尝试添加它,看看会发生什么。是否生成了 JAXBContext? 如果您不想将@XmlRootElement 添加到所有类,我认为您可能需要为 JAXBContext 创建一个 ContextResolver。不过我不确定。可能需要注释。 【参考方案1】:

如果你的类中没有提到注解@XmlRootElement(name = "name"),请尝试添加它。它对我有用!

【讨论】:

以上是关于Jersey REST (GET) throwing MessageBodyWriter not found for media type=application/xml的主要内容,如果未能解决你的问题,请参考以下文章

Jersey REST GET 正在工作,但 PUT 没有。请求的资源不允许指定的 HTTP 方法

Jersey / Rest 默认字符编码

Jersey实现Client端:GET/PUT/POST/DELETE

Jersey JAX-RS REST“getter”方法总是被调用

从 Jersey REST 客户端调用时出现 405 错误代码

jersey 接口发布