我有一个使用Jersey实现的REST API,我使用Jackson功能将对象自动序列化为JSON,还有一种特殊情况,我需要返回一个代表脚本的JSON字符串。由于脚本可以具有不同的未知结构,因此我不能将其序列化为Object,该脚本来自数据库表中的列。同时,我有一个完整的Script对象,它包含DB的所有信息,包括脚本字符串作为String属性。如何告诉Jersey Jackson不要序列化一个资源?
我要的是要告诉新泽西州的杰克逊没有序列化(跳过)端点GET /脚本/ {} 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注释是一个触发器通过杰克逊的自动转换,我想配置杰克逊,并排除我不想自动转换的资源端点。
我不想:
- 使用响应作为返回类型
- 更改主要生产的注释,以避免杰克逊
- 使用地图作为返回类型,我会通过饲料解析字符串
没有,这个问题是不是在Object忽略的属性,它是关于忽略单个资源方法'getScript()',我不希望杰克逊序列化该方法的结果,我希望它作为一个字符串返回,但不影响我返回的其他方法的对象序列化的对象杰克逊。 – raspacorp
@raspacorp您可以在我的答案中尝试其他两个选项,您可以在其中自定义如何在不影响其他任何内容的情况下对“脚本”进行序列化。它们将适用于返回“脚本”的任何端点。 – wasabi
问题不是关于返回Script的方法,因为我想让Jackson正常工作,问题是关于不返回Script的另一个方法它返回一个String,它是一个有效的JSON String,因此它已经是一个JSON我不想让杰克逊转换它。总之,一个方法返回一个Script对象,另一个方法返回JSON作为String。 – raspacorp