问题描述
我在 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)