gpt4 book ai didi

java - JaxRS 读取文本/xml 响应 MessageBodyProviderNotFoundException

转载 作者:行者123 更新时间:2023-12-01 23:51:08 25 4
gpt4 key购买 nike

我想使用返回 XML 数据的 Web 服务

    Client client = ClientBuilder.newClient();
String seLogerAPI = "http://ws.seloger.com/search.xml";
// Defining some query params. Full doc : https://github.com/bodinsamuel/seloger-php/blob/master/API.md
// More : https://github.com/pasnox/housing/blob/master/SeLoger.com.api.txt
WebTarget target = client.target(seLogerAPI)
.queryParam("idtypebien", "1") // apartements
.queryParam("idtt", "1") // Renting
.queryParam("nb_pieces", "5")
.queryParam("cp", "95330")
;
Response result = target.request(MediaType.TEXT_XML_TYPE).get();
ResponseRecherche res = result.readEntity(new GenericType<ResponseRecherche>() {});
System.out.println(res);

但是我遇到了这个错误:未找到 Media type=text/xml;charset=utf-8 的 MessageBodyReader

Response result = target.request(MediaType.TEXT_XML_TYPE).get(); 

工作正常,但是当我尝试使用将其放入 POJO 时

ResponseRecherche res = result.readEntity(new GenericType<ResponseRecherche>() {});

引发了 org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException...

仅供引用:ResponseRecherche 是一个 POJO,其结构与 Web 服务的答案相同。我正在关注本教程:https://vaadin.com/blog/-/blogs/consuming-rest-services-from-java-applications

不太明白为什么

我的pom.xml

        <dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.25</version>
</dependency>

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-jaxb</artifactId>
<version>2.25</version>
</dependency>

感谢您的阅读

最佳答案

错误消息表明您的 JAX-RS 实现无法将 XML 转换为 POJO (ResponseRecherche)。 JAX-RS 使用 MessageBodyReaders 将响应实体转换为 Java 对象。所有 JAX-RS 实现都需要提供一组内置的 MessageBodyReaders,但用户可以提供自己的用于自定义转换。

您可能有两种解决方案:1) 使用内置的 JAXB MessageBodyReader - 为此,您需要使用 JAXB 注释(例如 @XmlRootElement 等)来注释 POJO。有关将 JAXB 与 JAX-RS 结合使用的一个很好的教程 - 包括如何注释对象类可以是在这里找到: https://dennis-xlc.gitbooks.io/restful-java-with-jax-rs-2-0-2rd-edition/en/part1/chapter6/jaxb.html

2) 创建并注册您自己的 MessageBodyReader,它可以将 XML 从远程站点转换为您的 ResponseRecherche 对象。同一个教程提供了一些关于如何创建自定义 MessageBodyReaders 的有用信息: https://dennis-xlc.gitbooks.io/restful-java-with-jax-rs-2-0-2rd-edition/en/part1/chapter6/custom_marshalling.html

请注意,由于您使用的是 JAX-RS 客户端 API,因此您需要显式注册自定义 MessageBodyReader,如下所示:

Client client = ClientBuilder.newClient();
client.register( MyMessageBodyReader.class );

希望这有帮助,安迪

关于java - JaxRS 读取文本/xml 响应 MessageBodyProviderNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44185060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com