动态JsonProperty使用Jackson和Spring Boot

时间:2016-11-16 16:39:57

标签: java spring spring-boot jackson

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

@JsonProperty("field_001)
private String name;

@JsonProperty("field_002)
private String address;

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

@JsonProperty("field_005)
private String name;

@JsonProperty("field_006)
private String address;

我希望能够利用Spring Boot原生支持基于配置文件的属性文件。从运行时读取外部属性文件中的JsonProperty注释值。

例如,

可能有三个文件application.properties,application-test.properties和application-prod.properties。除了基于“spring.profiles.active”设置的vanilla属性文件外,Spring Boot还可以读入test或prod属性。

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

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

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

祝你好运

1 个答案:

答案 0 :(得分:0)

@JsonProperty(@Value("${property.file.reference.here}))不会仅仅因为:

@JsonProperty使用String作为值,但@Value是'Annotation',因此它不是String值,编写它会给出以下错误:

  

错误:(34,12)java:annotation对java.lang.String类型的元素无效

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

修改

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

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