gpt4 book ai didi

java - 如何告诉 Jersey Jackson 不要序列化一项资源?

转载 作者:行者123 更新时间:2023-12-01 22:54:20 24 4
gpt4 key购买 nike

我有一个使用 Jersey 实现的 REST API,我使用 Jackson 功能自动将对象序列化为 JSON,有一种特殊情况,我需要返回表示脚本的 JSON 字符串。由于脚本可以具有不同的未知结构,因此我不能将其序列化为对象,该脚本来自数据库表中的列。同时,我有一个完整的脚本对象,其中包含数据库的所有信息,包括作为字符串属性的脚本字符串。

我想要的是告诉 Jersey-Jackson 不要序列化(跳过)端点 GET/script/{scriptId},看代码:

@Path("script")
@Produces(MediaType.APPLICATION_JSON)
public class ScriptResource {
private ScriptService service;

@GET
@Path("{scriptId}")
public String getScript(@NotNull @PathParam("scriptId") Integer scriptId) {
return service.getScript(scriptId); // returns a a valid JSON String
}


@GET
@Path("full/{scriptId}")
public Script getFullScript(@NotNull @PathParam("scriptId") Integer scriptId) {
return service.getFullScript(scriptId); // returns a Script object
}
}

@Produces 注释是通过 Jackson 触发自动转换的注释,我想配置 Jackson 并排除我不想自动转换的资源端点。

我不想:

  • 使用 Response 作为返回类型
  • 更改 Produces 注释以避免 Jackson
  • 使用 Map 作为返回类型,我将通过解析字符串来提供它

最佳答案

除了 @wasabi 提到的选项之外,您还可以考虑的另一个选项是为您的字符串提供一个包装类,它将自定义 Jackson 序列化,这样它就不会转换为 JSON。这可以通过在 getter 方法上结合使用 @JsonValue@JsonRawValue 注释来完成。

这是一个示例包装器:

public class RawJsonString {
private final String json;

public RawJsonString(String json) {
this.json = json;
}

@JsonRawValue
@JsonValue
public String getJson() {
return json;
}
}

...那么您修改后的资源方法将如下所示:

@GET
@Path("{scriptId}")
public JsonRawString getScript(@NotNull @PathParam("scriptId") Integer scriptId) {
return new JsonRawString(service.getScript(scriptId)); // returns a a valid JSON String
}

关于java - 如何告诉 Jersey Jackson 不要序列化一项资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24316466/

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