Springboot使用@JsonView过滤对象属性

Springboot使用@JsonView过滤序列化对象属性java

 

 简介:浏览器

@JsonView是Jackson的一个注解,能够用来过滤序列化对象的字段属性,是你能够选择序列化对象哪些属性,哪些过滤掉。app

 

 @JsonView使用步骤:

一、使用接口来声明多个视图测试

二、在值对象的get方法上指定视图this

三、在Controller方法上指定视图spa

 

一、使用接口来声明多个视图

使用同一个对象,面对不一样的场景,去声明多个视图。code

例如:xml

有一个User对象,里面有username、password、realname、sex等属性对象

*场景1:得到对象的用户名、密码继承

*场景2:得到对象的所有属性

 

为了测试,建立一个User实体对象,加入两个接口OneView,TwoView

import java.io.Serializable;

public class User implements Serializable{
	private static final long serialVersionUID = -218391826213575747L;

	// 视图1
	public interface OneView{};
        // 视图2 继承视图1
	public interface TwoView extends OneView{};
	
	private String username;
	private String password;
	private String realName;
	private String sex;
        public User() {}
       
	public String getUsername() {
		return username;
	}
	
	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getPassword() {
		return password;
	}
	
	public void setPassword(String password) {
		this.password = password;
	}

	public String getRealName() {
		return realName;
	}

	public void setRealName(String realName) {
		this.realName = realName;
	}
	
	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
}

二、在值对象的get方法上指定视图

在实体类User里的get方法上面加上@JsonView注解,并将它绑定到一个指定接口

分两类

@JsonView(OneView.class):绑定username、password属性

@JsonView(TwoView.class):绑定realName、sex属性,继承OneView接口(至关于绑了OneView绑定的属性)

import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonView;

public class User implements Serializable{
	private static final long serialVersionUID = -218391826213575747L;

	// 视图1
	public interface OneView{};
	// 视图2 继承视图1
	public interface TwoView extends OneView{};
	
	private String username;
	private String password;
	private String realName;
	private String sex;

	@JsonView(OneView.class)
	public String getUsername() {
		return username;
	}
	
	public void setUsername(String username) {
		this.username = username;
	}
	
	@JsonView(OneView.class)
	public String getPassword() {
		return password;
	}
	
	public void setPassword(String password) {
		this.password = password;
	}

	@JsonView(TwoView.class)
	public String getRealName() {
		return realName;
	}

	public void setRealName(String realName) {
		this.realName = realName;
	}
	
	@JsonView(TwoView.class)
	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
}

三、在Controller方法上指定视图

在controller中俩个方法分别加上@JsonView注解,在分配上不一样场景的接口

user1:输出视图1

user2:输出视图2

@RestController
@RequestMapping("/user")
public class UserController {

	@GetMapping("/user1")
	@JsonView(OneView.class)
	public User queryUser1() {
		User user = new User();
		user.setUsername("test1");
		user.setPassword("123456");
		user.setRealName("测试");
		user.setSex("男");
		return user;
	}

	@GetMapping("/user2")
	@JsonView(TwoView.class)
	public User queryUser2( String id) {
		User user = new User();
		user.setUsername("test1");
		user.setPassword("123456");
		user.setRealName("测试");
		user.setSex("男");
		return user;
	}
}

四、测试

在浏览器中地址栏输入测试地址

http://localhost:8080/user/user1

http://localhost:8080/user/user2

结果:

user1

user2

五、总结

说明@OneView只会序列化username、password属性,TwoView会序列化username、password、realName、sex属性。

所以想设置不一样接口的不一样场景,能够用@JsonView达到某些目的。

相关文章
相关标签/搜索