gpt4 book ai didi

jersey - 如何调整由 Jackson 的 JAXRS 提供程序生成的 JSON?

转载 作者:行者123 更新时间:2023-12-04 20:07:24 26 4
gpt4 key购买 nike

我使用 jersey 和 jackson 来格式化 JSON 输出。

Java 源代码如下所示:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import javax.json.Json;
import javax.json.JsonObject;

@Path("/hello")
public class Hello {

@GET
@Produces(MediaType.APPLICATION_JSON)
public JsonObject reservations() {
JsonObject result = Json.createObjectBuilder()
.add("hello","world")
.add("name", "Bowes")
.add("id", "4E37071A-CB20-49B8-9C82-F2A39639C1A3")
.add("age", 25)
.build();
return result;
}
}

我在 pom.xml 文件中依赖于 Jackson,如下所示:
<!-- avoid this message:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:
MessageBodyWriter not found for media type=application/json -->
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.3.3</version>
</dependency>

今天的输出如下所示:
{"hello":{"chars":"world","string":"world","valueType":"STRING"},"name":{"chars":"Bowes","string":"Bowes","valueType":"STRING"},"id":{"chars":"4E37071A-CB20-49B8-9C82-F2A39639C1A3","string":"4E37071A-CB20-49B8-9C82-F2A39639C1A3","valueType":"STRING"},"age":{"integral":true,"valueType":"NUMBER"}}

我真的希望它被格式化并省略“chars”和“valueType”字段。像这样:
{
"hello": "world",
"name": "Bowes",
"id": "4E37071A-CB20-49B8-9C82-F2A39639C1A3",
"age": 25
}

我怎样才能做到这一点?

最佳答案

我相信这个问题是因为您返回了 JsonObject而不是 String .序列化 JsonObject默认情况下,需要返回足够的信息以便能够在反序列化时重新创建它。

您可以使用 JsonWriter将其转换为 String并返回,或者更好的是,使用您的字段创建一个本地静态类并简单地返回该对象。由于您的方法被标记为返回 JSON,Jersey/Jackson 将自动为您序列化您的对象。根据您的 Jackson 设置,您可能需要对类进行注释,以便 Jackson 知道如何处理它。

@JsonAutoDetect(fieldVisibility = Visibility.ANY)
private static class MyReturn {
String hello;
String name;
UUID id;
int age;
}

关于jersey - 如何调整由 Jackson 的 JAXRS 提供程序生成的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23665568/

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