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達到某些目的。

相關文章
相關標籤/搜索