当前位置: 首页 > 知识库问答 >
问题:

带有默认值的Jackson的@JsonAppend

权烨磊
2023-03-14

伙计们!我正在开发一个web应用程序,我决定使用Jackson作为JSON处理框架。

我愿意发送请求数据;假设POJO看起来像这样:

data class JSONEnvelope(
        @JsonProperty("obj1")
        val obj1: Obj1,

        @JsonProperty("obj2")
        val obj2: Obj2)

将其序列化如下:

{
    "obj1":{...},
    "obj2":{...}
}

但是我需要向该对象添加一些元数据,比如字段meta1meta。我以为@JsonAppend会解决我的问题,但是我正在使用Jackson和泽西一起使用,所以我没有手动序列化对象,所以我不能使用writer.with属性("...",...)

我知道这个线程,但是没有一个答案可以满足我的需求,因为我认为,编写一个自定义序列化程序是有点过分了,而且如果我没有一个机制来“序列化原始对象的其余部分”。我很高兴有任何想法

共有1个答案

苏波涛
2023-03-14

您引用的答案中的解决方案是一个很好的解决方案,它向ObjectMapper添加了一个混合函数,然后使用ObjectWriter来配置它。

对于Jersey,它调用ObjectMapper。writerFor,因此禁止调用withAttribute为了配置ObjectWriter,一种替代方法是在从writerFor返回属性之前将属性添加到ObjectWriter。我建议对ObjectMapper进行子类化,覆盖各种writerFor方法,并在此时添加必要的属性。然后,通过将ObjectMapper注册为JAX-RS提供者,您可以让Jersey使用它:请参阅javax中的各种注释。ws。rs开始这项工作。这个答案给出了一个如何做的例子。

 类似资料:
  • 后续问题。有这样的等级制度。其中A是基类: 以及以下内容: 我想将B实例的所有ID映射到B.isVisible()的值,并将C实例的ID映射到TRUE 在最初问题的帮助下,我将其提炼为以下格式: 丑陋的版本是: 有没有帮助改进它,为更优雅的版本提供默认true?

  • 我尝试使用以下代码反序列化API中接收的JSON对象: 我的类使用Lombok生成构造函数、getter和setter,如下所示: 这两个属性都应该是可选的,如果没有提供,则使用类定义中指定的默认值。但是,如果我现在尝试反序列化JSON 字段为。根据我的理解,以及我找到的所有示例代码,应该是一个空列表。 编辑:不是重复的,因为我使用的是没有选项的Lombok

  • 我想为实现接口的类中的函数参数使用默认值,如下所示: 现在这里是编译的,这里是不编译的: KO:不允许重写函数为其参数指定默认值 KO:类“LocalFileStoreService”不是抽象的,并且没有实现抽象成员公共抽象存储文件(路径:String,负载:InputStream,类型:MediaType):fqn中定义的单元。。。文件存储服务 好 啊: 这是预期的行为吗?有没有更好的方法来管理

  • 我有一个问题胸腺。我有一个带有组合框和一些字段的表单。我想把默认值放在组合框中,而“选择”对我不起作用。 代码如下: 其中“tipoDocumento”是具有两个值的枚举: 有人能帮我吗?

  • 我使用Java和Jackson库将JSON文件解析为Java类。我的问题是,如果值为null或空,我无法设置默认值。有可能吗?现在,我只是把它写在setters部分。 例如,我有一个JSON文件 在我的Java类中,如果值为null或空,我想将其设置为Java函数。 举个例子 所以,如果设置了这个值,那么就是它。如果不是,那应该是美国。

  • 我正在开发一个基于spring boot的rest web服务,我使用lombok来生成getter和setter,但是当我调用我的web服务时,我得到了一个带有默认值null的对象,这是我的代码: 我的实体 : 这是我的Rest服务: 在我的配置文件中,我添加了以下行: 当我呼叫我的服务时,我得到以下响应: 如果我在我的类中添加了getters和setters,它就能正常工作,我会得到json的