个性化阅读
专注于IT技术分析

为RESTful服务实现静态过滤

本文概述

在本节中, 我们将学习如何过滤请求。

过滤器是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;
@RestController
public 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 
{
private  String name;
private  String phone;
//JsonIgnore indicates that the annotated method or field is to be ignored
@JsonIgnore
private  String salary;
//generating constructor
public 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请求。它返回两个字段:名称和电话。现场薪水将不随响应一起发送。

为RESTful服务实现静态过滤

无论是发送一个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;
@RestController
public 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的列表。

为RESTful服务实现静态过滤

还有另一种使用注释@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 
{
private  String name;
private  String phone;
//JsonIgnore indicates that the annotated method or field is to be ignored
@JsonIgnore
private  String salary;
//generating constructor
public 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注释。因此, 它返回空列表。

为RESTful服务实现静态过滤

现在, 删除注释@JsonIgnore并再次触发GET请求。它仅返回薪金属性。

为RESTful服务实现静态过滤

我们所做的任何事情都称为静态过滤。假设我们要在一个场景中忽略名称, 而在另一场景中忽略薪水, 则无法使用静态过滤来做到这一点。为了实现这种类型的过滤, 我们使用动态过滤。


赞(0)
未经允许不得转载:srcmini » 为RESTful服务实现静态过滤

评论 抢沙发

评论前必须登录!