我正在开发一个使用Spring-boot,关系数据库和Elasticsearch的应用程序。忽略Elasticsearch中的JsonIgnore
我使用JSON序列化的2型动物的地方代码:
- 在REST API的响应。
- 当代码与Elasticsearch交互时。
我在Elasticsearch中需要一些属性,但我想隐藏给应用程序用户(例如来自关系数据库的内部ID)。
这里是实体的一个示例:
@Document
public class MyElasticsearchEntity {
@Id
private Long id; //I want to hide this to the user.
private String name;
private String description;
}
问题:当在Elasticsearch持久存储的对象,它就会被序列化为JSON。因此,当序列化为Elasticsearch时,忽略@JsonIgnore
的字段。
到现在为止,我发现2个不令人满意的解决方案:
解决方案1 :使用@JsonProperty
这样的:
@Id
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Long id;
的id
被写在Elasticsearch和JSON响应是无效:
{
"id" : null,
"name" : "abc",
"description" : null
}
因此,它的工作原理,但应用程序用户仍然看到该属性存在。这很混乱。
解决方案2:Cutomize对象映射到忽略空值
春季启动有一个内置选项:
spring.jackson.serialization-inclusion=NON_NULL
问题:抑制所有非空的属性,不仅是我想忽略的那些。假设前面的实体领域description
是空的,JSON响应将是:
{
"name" : "abc"
}
这是对UI问题。
那么有没有办法只在JSON响应中忽略这样的字段?