Springboot使用@JsonView過濾序列化對象屬性java
簡介:瀏覽器
@JsonView是Jackson的一個註解,能夠用來過濾序列化對象的字段屬性,是你能夠選擇序列化對象哪些屬性,哪些過濾掉。app
一、使用接口來聲明多個視圖測試
二、在值對象的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; } }
在實體類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中倆個方法分別加上@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達到某些目的。