@Override
public void serialize(TaxonomyNode value, JsonGenerator jgen, SerializerProvider provider) {
jgen.writeStartObject();
jgen.writeAllFields(value); // <-- The method I'd like to have
jgen.writeObjectField("my_extra_field", "some data");
jgen.writeEndObject();
}
或者(甚至更好)在jgen.writeEndObject()
调用之前以某种方式截取序列化,例如:
@Override void beforeEndObject(....) {
jgen.writeObjectField("my_extra_field", "some data");
}
我想我可以扩展BeanSerializer
并重写它的Serialize(..)
方法,但它被声明为final
,而且我找不到一种简单的方法来创建BeanSerializer
的新实例,而不为它提供所有类型元数据细节,这实际上是复制Jackson的一个很好的部分。所以我已经放弃了。
我的问题是-如何定制Jackson的序列化,为特定POJO向JSON输出添加额外的内容,而不引入太多的样板代码,并尽可能多地重用默认的Jackson行为。
Jackson2.5引入了@JSONAPPEND
注释,可用于在序列化过程中添加“虚拟”属性。它可以与mixin功能一起使用,以避免修改原始POJO。
以下示例在序列化过程中添加ApprovalState
属性:
@JsonAppend(
attrs = {
@JsonAppend.Attr(value = "ApprovalState")
}
)
public static class ApprovalMixin {}
使用objectmapper
注册mixin:
mapper.addMixIn(POJO.class, ApprovalMixin.class);
ObjectWriter writer = mapper.writerFor(POJO.class)
.withAttribute("ApprovalState", "Pending");
问题内容: 我正在使用Jackson将应用程序的REST接口序列化为JSON表示形式的POJO域对象。我想为某些类型自定义序列化,以将其他属性添加到POJO中不存在的JSON表示中(例如,添加一些元数据,参考数据等)。我知道如何编写自己的方法,但是在那种情况下,我需要为对象的 每个* 属性显式调用方法,而我所需要的只是 添加 一个附加属性。换句话说,我希望能够编写如下内容: *** 或者(甚至更好
问题内容: 我希望能够以不同于web.xml的方式修改/配置过滤器。这是2个过滤器的静态配置。我希望能够静态配置一个过滤器,并允许该过滤器加载其他过滤器。我只是想知道是否有人知道lib已有此功能。 使用Servlet API 2.5 我已经在Guice的GuiceFilter中完成了此操作,其中在运行时配置了过滤器。 问题答案: 只需执行与容器已完成的相同的工作即可。即,按照servlet过滤器所
问题内容: 有没有办法可以在不重新加载页面的情况下修改当前页面的URL? 如果可能,我想访问#哈希 之前 的部分。 我只需要更改域 后 的部分,所以就好像我没有违反跨域策略一样。 问题答案: 现在,可以在Chrome,Safari,Firefox 4+和Internet Explorer 10pp4 +中完成此操作! 例: 然后,您可以用来检测后退/前进按钮的导航:
我有一个以下查询,我在其中连接表、和:
问题内容: 有没有办法可以在不重新加载页面的情况下修改当前页面的URL? 如果可能,我想访问#哈希 之前 的部分。 我只需要更改域 后 的部分,所以就好像我没有违反跨域策略一样。 问题答案: 现在,可以在Chrome,Safari,Firefox 4+和Internet Explorer 10pp4 +中完成此操作! 有关更多信息,请参见此问题的答案: 使用新URL更新地址栏而不散列或重新加载页面
我正在使用根据我的POJO创建JSON数据。我想在不修改POJO的情况下向JSON中添加一些附加属性。 由于POJO已作为依赖项添加到我的项目中,我无法修改它,但我需要JSON中的一些附加字段。有没有一种方法可以在不修改Java POJO的情况下向JSON添加新的键值对?我目前正在使用Jackson 2.13.2最新版本的依赖项: 以下是Java代码: 这为我提供了JSON: 我想获得看起来像这样