gpt4 book ai didi

java - 如何使用 jersey REST 客户端发送包含 JSON 格式的 dom 元素的请求

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:43 26 4
gpt4 key购买 nike

我的 java 应用程序中有 jersey REST 客户端,我想以 JSON 格式发送请求,并且请求 object 包含 Element

当我用 XML 格式发送请求时,一切正常,但是当尝试用 JSON 格式发送请求时,服务器发送请求失败。

如果我创建 Element 而没有附加到 Document,它会生成以下错误:

com.fasterxml.jackson.databind.JsonMappingException: Direct self-reference leading to cycle

如果我创建 Element 并将其附加到 Document,它会生成以下错误(doc.appendChild(root);):

com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)

这是我创建请求对象的方式:

public OTAAirLowFareSearchRS AirLowFareSearch(OTAAirLowFareSearchRQ request) throws Exception {
OTAAirLowFareSearchRS response = new OTAAirLowFareSearchRS();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElement("TPA_Extension");
doc.appendChild(root); // This the line I mention above that create different errors
Element e = doc.createElement("CUSTOM_VAR");
root.appendChild(e);
e.insertBefore(doc.createTextNode("CUSTOM_VALUE"), e.getLastChild());
TPAExtensionsType tpa = new TPAExtensionsType();
tpa.getAny().add(root);
request.getPOS().getSource().get(0).setTPAExtensions(tpa);
JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider().configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
Client client = ClientBuilder.newClient(new ClientConfig(jacksonJsonProvider));
WebTarget target = client.target(GlobalVariable.bus_url).path("AirLowFareSearch");
response = target
.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(request, MediaType.APPLICATION_JSON_TYPE),
OTAAirLowFareSearchRS.class);
return response;
}

当我使用如下所示的 XML 格式发送我的请求时,一切正常:

        //JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider().configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
//Client client = ClientBuilder.newClient(new ClientConfig(jacksonJsonProvider));
Client client = ClientBuilder.newClient();
WebTarget target = client.target(GlobalVariable.bus_url).path("AirLowFareSearch");
response = target
.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(request, MediaType.APPLICATION_XML_TYPE),
OTAAirLowFareSearchRS.class);

当我在不添加 Element 的情况下发送请求时,我也可以发送 JSON 请求(因此配置 JSON 时没有错误)。

这也是 Open Travel 对象,我也无法更改请求。

请帮帮我。

最佳答案

问题来自 DOM 元素。解决它的最佳方法是使用 map 而不是 DOM 元素,这样您就可以轻松处理 map 。

关于java - 如何使用 jersey REST 客户端发送包含 JSON 格式的 dom 元素的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011292/

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