仅将 @JsonIgnore 用于生产,但在测试中它应该在那里

问题描述

我在 Kotlin 中有一个这样的(数据)类。
在运行具有活动 Spring 配置文件 live 的应用程序时,我只想返回 name
但是运行具有活动 Spring 配置文件 test 的应用程序,我希望显示 version,以便我可以测试我是否获得了正确的版本。

data class MyClass( 

 val name: String

 @JsonIgnore
 val version: Number

)

有没有可能?

解决方法

您可以对测试和生产环境使用不同的 Jackson JSON Views

data class MyClass( 
 @JsonView(Views.Prod.class,Views.Test.class)
 val name: String

 @JsonView(Views.Test.class)
 val version: Number

)

并且您必须通过基于环境传递视图来手动处理序列化/反序列化。

MyClass class = mapper
      .readerWithView(Views.<Required-view>.class)
      .forType(MyClass.class)
      .readValue(json);
String result = mapper
      .writerWithView(Views.<Required-view>.class)
      .writeValueAsString(class);
,

您可以使用 @JsonInclude(Include.NON_NULL) 仅在响应非空时将其包含在响应中。然后,您可以在生产中运行时创建没有版本号的对象:

data class MyClass( 
    val name: String,@JsonInclude(Include.NON_NULL)
    val version: Number? = null
)

// At creation:
val myClass = if (prod) MyClass(name) else MyClass(name,version)