@JsonIgnoreProperties用于已知和未知属性

use*_*321 17 java json jackson

我当前用于忽略JPA实体的已知属性的注释是:

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler","created","updated","createdBy","lastUpdatedBy"})
Run Code Online (Sandbox Code Playgroud)

除了忽略这些类属性之外,我还想忽略服务器接收的任何未知属性.我知道通过以下注释忽略未知属性的单独方法:

@JsonIgnoreProperties(ignoreUnknown=true)
Run Code Online (Sandbox Code Playgroud)

但不知道如何将其添加到我上面给出的当前注释中.我尝试了下面的多种方法,但似乎都没有工作,我找不到这个场景的在线示例.

文档上的任何示例或引导也会有所帮助.

cas*_*lin 31

简短的回答

设置ignoreUnknowntrue和定义属性中忽略的名字value元素:

@JsonIgnoreProperties(ignoreUnknown = true, 
                      value = {"hibernateLazyInitializer", "handler", "created"})
Run Code Online (Sandbox Code Playgroud)

它是如何工作的?

文档中看一下这个引用(突出显示是我的):

在最简单的形式中,注释如下所示:

@Entity
Run Code Online (Sandbox Code Playgroud)

at符号(@)向编译器指示后面的内容是注释.在以下示例中,注释的名称为Override:

@Override
void mySuperMethod() { ... }
Run Code Online (Sandbox Code Playgroud)

注释可以包含可以命名或未命名的元素,并且这些元素有值:

@Author(name = "Benjamin Franklin", date = "3/27/2003")
class MyClass() { ... }
Run Code Online (Sandbox Code Playgroud)

要么

@SuppressWarnings(value = "unchecked")
void myMethod() { ... }
Run Code Online (Sandbox Code Playgroud)

如果只有一个名为的元素value,那么名称可以省略,如:

@SuppressWarnings("unchecked")
void myMethod() { ... }
Run Code Online (Sandbox Code Playgroud)

处理未知属性的其他方法

要忽略未知属性,您还可以执行以下操作:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Run Code Online (Sandbox Code Playgroud)