gpt4 book ai didi

java - Inspiration.Builder java如何将json作为字符串而不是实体发布

转载 作者:行者123 更新时间:2023-11-30 05:40:38 24 4
gpt4 key购买 nike

使用 Java 中的调用构建器,put/post 的唯一选项是实体作为它从中获取 json 的对象:

    public <T> T put(final Entity<?> entity, final Class<T> responseType)

如果您已经在字符串中包含 json,是否有任何方法可以放置/发布它,而不必将其转换为实体(我们假设只是一个对象)

String payload = "{\"name\":\"hello\"}";

WebTarget webTarget = theHttpClient.target(url);
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON)
.header(HttpUtils.AUTHORISATION_HEADER_NAME, "Bearer " + theAccessToken);

// this outputs the string with slashes, i.e. "{\n\"name\":\"hello\"\n}"; instead of {"name":"hello"}
invocationBuilder.put( Entity.json(theObjectMapper.writeValueAsString(payload)), responseClass);

// this will not compile as payload is not an Entity
invocationBuilder.put(payload, responseClass);

最佳答案

我做了一个快速测试,我认为您的错误来自于您直接在此处调用对象映射器

Entity.json(theObjectMapper.writeValueAsString(payload))

通过快速测试,如果您只是传递有效负载字符串而不调用对象映射器,它似乎可以工作

pom.xml

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

<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.28</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.8.3</version>
</dependency>
</dependencies>

testIncationBuilder.java

public class testInvocationBuilder
{
public static void main(String[] args)
{
Client client = ClientBuilder.newClient().register(JacksonJaxbJsonProvider.class);
WebTarget webTarget = client.target("http://127.0.0.1:8000");

Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);

Payload p = new Payload();
p.name = "hello-there";

//this serializes the object in the request
Response payloadRsp = invocationBuilder.put(Entity.entity(p, MediaType.APPLICATION_JSON));
System.out.println(payloadRsp);

//this seems to pass through
String payload = "{\"name\":\"hello\"}";
Response stringRsp = invocationBuilder.put(Entity.entity(payload, MediaType.APPLICATION_JSON));
System.out.println(stringRsp);
}

public static class Payload {
public String name;
}
}

关于java - Inspiration.Builder java如何将json作为字符串而不是实体发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55727774/

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