相关疑难解决方法(0)

杰克逊:如何在不修改POJO的情况下向JSON添加自定义属性

我正在为我的应用程序开发一个REST接口,使用Jackson将我的POJO域对象序列化为JSON表示.我想为某些类型自定义序列化,以便为POJO中不存在的JSON表示添加其他属性(例如,添加一些元数据,参考数据等).我知道如何编写自己的JsonSerializer,但在这种情况下,我需要为我的对象的每个属性显式调用JsonGenerator.writeXXX(..)方法,而我只需添加一个额外的属性.换句话说,我希望能够写出如下内容:

@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();
}
Run Code Online (Sandbox Code Playgroud)

或者(甚至更好)在jgen.writeEndObject()调用之前以某种方式拦截序列化,例如:

@Override void beforeEndObject(....) {
    jgen.writeObjectField("my_extra_field", "some data");
}
Run Code Online (Sandbox Code Playgroud)

我以为我可以扩展BeanSerializer和覆盖它的serialize(..)方法,但是它被声明了final,而且我找不到一种简单的方法来创建一个新的实例BeanSerializer而不提供所有类型的元数据细节实际上复制了杰克逊的一部分.所以我放弃了这样做.

我的问题是 - 如何定制Jackson的序列化,为特定POJO的JSON输出添加额外的东西,而不会引入太多的样板代码并尽可能多地重用默认的Jackson行为.

java customization serialization json jackson

55
推荐指数
6
解决办法
5万
查看次数

向Spring JSON视图响应添加动态字段

有一种Spring方法可以过滤掉带有JSON视图的服务响应中的字段,但是缺少一种等效的方法来丰富具有这样的动态/同步字段的响应;

class User{
    getFirstName(){...}
    getLastName(){...}
    getCreateDate(){...}
}

class UserViewA{
    getFullName(){
      return getLastName()+", "+getFirstName()
    }
    getCreateDate(){...}
}

class UserViewB{
    getFullName(){
      return getFirstName()+" "+getLastName()
    }
    getCreateDate(){...}
}
Run Code Online (Sandbox Code Playgroud)

我可以将用户包装在视图中,但我不想手动传播所有需要的用户字段.

我的另一个想法是使用用户对象扩展视图并创建某种引用链接器以将用户对象的值引用复制到视图,但这会使集合变得复杂.

是否有其他方法或框架来实现这一目标?这个概念根本没有得到解决吗?

更新:

通过示例澄清:

  • 我不想包装User对象,因为我不想在不同的UserView对象中从User类维护相同的getter方法.
  • 我无法扩展用户,因为它是从其他资源加载的域对象.
  • User对象中不应该引用不同的UserView对象.

我正在寻找一种外观解决方案/框架/方法.

java spring json jackson

16
推荐指数
2
解决办法
3335
查看次数

杰克逊::在序列化中为对象添加额外的字段

在序列化为JSON时,我需要向对象添加新属性.属性的值是在运行时计算的,并且在对象中不存在.同样的对象也可以用于创建具有不同set ot字段的不同JSON(具有子类的基类,但我不想仅为JSON生成创建一个).

这样做的最佳方法是什么,这不涉及创建自定义序列化程序类,它将负责整个对象字段的序列化?或者可能继承一些"基本"序列化器,只需将其输出并以某种方式添加新字段?

我了解了mixins,看起来可以重命名/隐藏一些字段,但似乎无法添加额外的字段.

serialization json jackson

10
推荐指数
2
解决办法
1万
查看次数

Jackson定制注释用于自定义值序列化

我正在尝试创建会影响序列化值的自定义jackson注释.

含义:

class X {
@Unit("mm") int lenght;
 ...
}
Run Code Online (Sandbox Code Playgroud)

现在序列化对象X(10)会导致:

{
  "lenght" : "10 mm"
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

java serialization json jackson

7
推荐指数
1
解决办法
4510
查看次数

标签 统计

jackson ×4

json ×4

java ×3

serialization ×3

customization ×1

spring ×1