本文概述
- @JsonIgnore
- @JsonIgnoreProperties
过滤器是JAX-RS框架提供的重要功能之一。它用于各种环境。它可以应用于对资源的请求或来自资源的响应, 或两者都应用。
考虑一个我们不希望在响应中显示某些类成员的情况。此过程称为过滤。 Jackson具有两个用于过滤的注释:@JsonIgnore和@JsonIgnoreProperties。
@JsonIgnore 它是成员或方法级别的注释。它期望要排除的属性被一一标记。如果要从序列化和反序列化过程中删除成员, 则可以注释实际属性或其设置器或获取器。
让我们创建一个过滤器来过滤响应。我们将不涉及用户示例, 但是, 我们将创建一个新的控制器和bean来执行过滤, 而不是这个例子。
步骤1:在com.srcmini.server.main.filtering包中创建一个名称为FilteringController.java的Controller类。
步骤2:创建一个名为SomeBean的bean。
FilteringController.java
package com.srcmini.server.main.filtering;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class FilteringController {@RequestMapping("/filtering")public SomeBean retrieveSomeBean(){return new SomeBean("Amit", "9999999999", "39000");
}}
步骤3:创建一个名为SomeBean.java的类。定义三个属性名称, 电话和薪水。
步骤4:生成构造函数。
步骤5:生成Getter和Setter。
SomeBean.java
package com.srcmini.server.main.filtering;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class SomeBean {privateString name;
privateString phone;
//JsonIgnore indicates that the annotated method or field is to be ignored@JsonIgnoreprivateString salary;
//generating constructorpublic SomeBean(String name, String phone, String salary) {super();
this.name = name;
this.phone = phone;
this.salary = salary;
}public String getName() {return name;
}public void setName(String name) {this.name = name;
}public String getPhone() {return phone;
}public void setPhone(String phone) {this.phone = phone;
}public String getSalary() {return salary;
}public void setSalary(String salary) {this.salary = salary;
}}
步骤6:打开REST客户端Postman并发送GET请求。它返回两个字段:名称和电话。现场薪水将不随响应一起发送。
文章图片
无论是发送一个SomeBean作为响应, 还是发送SomeBeans列表作为响应, 字段工资都不会在响应中发送。
步骤7:创建另一个返回SomeBean列表的bean。
FilteringController.java
package com.srcmini.server.main.filtering;
import java.util.Arrays;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class FilteringController {//returning a single bean as response@RequestMapping("/filtering")public SomeBean retrieveSomeBean(){return new SomeBean("Amit", "9999999999", "39000");
}//returning a list of SomeBeans as response@RequestMapping("/filtering-list")public List<
SomeBean>
retrieveListOfSomeBeans(){return Arrays.asList(new SomeBean("Saurabh", "8888888888", "20000"), new SomeBean("Devesh", "1111111111", "34000"));
}}
步骤8:使用URI http:// localhost / filtering-list再次发送GET请求, 该请求返回SomeBeans的列表。
文章图片
还有另一种使用注释@JsonIgnoreProperties的方法。
@JsonIgnoreProperties @JsonIgnoreProperties是类级别的注释。它忽略JSON序列化和反序列化中的逻辑属性。
在以下SomeBean.java文件中, 我们指定了属性名称和phone, 我们希望在响应中忽略它们。这两个属性将参与JSON序列化和反序列化。
如果使用@JsonIgnore注释属性薪金, 则在JSON序列化和反序列化中忽略所有属性。
换句话说, 在JSON序列化和反序列化中, 被@JsonIgnore和@JsonIgnoreProperties批注忽略的逻辑属性的并集被认为被忽略。
SomeBean.java
package com.srcmini.server.main.filtering;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties({"name", "phone"})public class SomeBean {privateString name;
privateString phone;
//JsonIgnore indicates that the annotated method or field is to be ignored@JsonIgnoreprivateString salary;
//generating constructorpublic SomeBean(String name, String phone, String salary) {super();
this.name = name;
this.phone = phone;
this.salary = salary;
}public String getName() {return name;
}public void setName(String name) {this.name = name;
}public String getPhone() {return phone;
}public void setPhone(String phone) {this.phone = phone;
}public String getSalary() {return salary;
}public void setSalary(String salary) {this.salary = salary;
}}
当我们触发GET请求时, 它返回一个空列表, 因为属性名称和电话在@JsonIgnoreProperties中指定, 并且属性薪水用@JsonIgnore注释。因此, 它返回空列表。
文章图片
现在, 删除注释@JsonIgnore并再次触发GET请求。它仅返回薪金属性。
文章图片
【为RESTful服务实现静态过滤】我们所做的任何事情都称为静态过滤。假设我们要在一个场景中忽略名称, 而在另一场景中忽略薪水, 则无法使用静态过滤来做到这一点。为了实现这种类型的过滤, 我们使用动态过滤。
推荐阅读
- 执行GET服务以检索用户的所有帖子
- Win 8系统怎样自已手工扫描硬件驱动
- 笔记本win8.1系统设置“最佳电池寿命”的办法【图文详细教程】
- win8系统打开逆战游戏提示“您的游戏运行环境?”怎样办
- Win 8打开中文软件出现一大串乱码怎样办
- win8用户头像如何删除?win8迅速删除用户头像的办法
- Win7/Win 8升级Win10后网速变慢怎样办
- Win8系统自带邮箱里面的超链接都打开不了如何处理
- win8系统在桌面创建应用程序快捷方式的2种办法