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

使用Jackson和Spring Boot的动态JsonProperty

邹京
2023-03-14

我开发了一个Spring Boot应用程序。该应用程序可以部署到测试或prod环境,该应用程序使用REST API发出请求。我使用POJO作为包装器,JsonProperty注释包含要推送到的API的字段ID。

ie

@JsonProperty("field_001)
private String name;

@JsonProperty("field_002)
private String address;

这些值的字段标签在测试endpoint上不同。因此,测试endpoint可能希望属性映射为

@JsonProperty("field_005)
private String name;

@JsonProperty("field_006)
private String address;

我希望能够利用Spring Boot对基于概要文件的属性文件的本机支持。在运行时从外部属性文件中读取JsonProperty注释值。

所以举个例子,

应用程序中可能有三个文件。属性,应用测试。属性和application-prod.properties。Spring Boot可以根据“Spring.profiles.active”设置读取除vanilla属性文件之外的测试或产品属性。

...-test.properties将包含测试服务器字段的常量值。和...-prod.properties将包含产品服务器字段的常量值。

嵌套注释,如Spring的@Value标记,如下所示:

@JsonProperty(@Value("${property.file.reference.here})) 
doesn't seem to work.

顺致敬意,

共有1个答案

燕昊东
2023-03-14

@JsonProperty(@Value(${property.file.reference.here}))无法正常工作,因为:

@JsonProperty使用String作为值,但是@Value是一个'Annoation',所以这不是一个String值,编写它会给你以下错误:

错误:(34,12)java:注释对java类型的元素无效。串

另外,当加载spring上下文时,@Value将被“一次”加载。

编辑

如果您希望使用test/dev和prod属性,最好在您的测试资源包下创建一个属性文件,它们将被自动加载。(我就是这样使用的)。

实际上还有另一种方法,就是在运行时修改注释值。

 类似资料:
  • 问题内容: 我有一个与此类似的类层次结构: 像这样的json输入(我无法改变自己) 我正在像这样用Jackson解析Java中的JSON 我想使用JAVA / Jackson从JSON反序列化类A,B和其他类。JSON中没有嵌入类型信息(并且不能)。我不能在类上使用批注(我不拥有它们),我(相信)我不能使用混合包,因为可能有任意数量的类,例如A和B(混合包不是动态的)。好的是,反序列化代码知道哪个

  • 你好,我有下一个json响应: 正如你所见,我有一个资源对象,里面有许多不同的对象,但这些对象可能会根据输入的不同而有所不同。我创建了下一个pojo: 在我的输入Pojo中: 导入java。util。列表 我将资源添加为对象列表,但我可以看到它是一个对象,其中包含不同的对象。如何将这些不同的对象映射到Java中的对象?事实上,我需要计算我有多少资源,但我正在努力实现这一目标。谢谢!

  • 问题内容: Jackson with Jersey是否支持JSON上的多态类? 比方说,例如,我有一个Parent类和一个从其继承的Child类。而且,假设我要使用JSON通过HTTP发送和接收父级和子级。 我考虑过这种实现: 问题:如果我(当然通过JSON)给此函数一个Child对象,它将起作用吗?Child的多余成员字段也将被序列化吗?基本上,我想知道这些框架是否支持多态消费和响应。 顺便说一

  • 问题内容: 我想序列化一个对象,以便根据字段的类型对字段之一进行不同的命名。例如: 在这里,我希望将该字段序列化为类似的内容,而不是总是根据情况将字段称为包含不同类型的字段。 使用Jackson怎么能达到这样的目的? 问题答案: 使用自定义。 然后,假设您要序列化以下两个对象: 第一个将打印: 第二个: 我使用了包装对象的名称,因为它仅用作花边固定器。如果要删除它,则必须为 整个 类编写一个自定义

  • 问题内容: 我使用不同的数据库,并且根据数据库,我需要将“ id”命名为不同的名称。因此,例如在id中被命名为“ @rid” 对于MongoDB,该ID名为“ _id” 我不知道现代数据库开发人员有什么问题,不仅仅是命名id字段“ id” ^^。但是现在我有一个问题。在某些情况下,如何将ID字段动态序列化/反序列化为“ @rid”,在另一种情况下,如何动态序列化/反序列化为“ _id”? 编辑:

  • Spring Boot应用程序的任务是每隔这么多分钟更新一次远程集成API。此应用程序可以部署到测试或prod环境中,通过“application.properties”标志通知应用程序应该查看的endpoint。POJO被Jackson序列化并推送到endpoint,JsonProperty注释包含它被推送到的API的字段ID。 ie 这些值的字段标签在测试endpoint上不同。因此,测试en