spring boot 之@JsonView 簡單介紹


@JsonView是jackson json中的一個注解,spring webmvc也支持這個注解。

 

這個注解的作用就是控制輸入輸出后的json.

假設我們有一個用戶類,其中包含用戶名和密碼,一般情況下如果我們需要序列化用戶類時,密碼也會被序列化,在一般情況下我們肯定不想見到這樣的情況。但是也有一些情況我們需要把密碼序列化,如何解決這兩種不同的情況呢?

 

使用@JsonView就可以解決。

 

看下面的簡單例子:

public class User {  
    public interface WithoutPasswordView {};  
    public interface WithPasswordView extends WithoutPasswordView {};  
  
    private String username;  
    private String password;  
  
    public User() {  
    }  
  
    public User(String username, String password) {  
        this.username = username;  
        this.password = password;  
    }  
  
    @JsonView(WithoutPasswordView.class)  
    public String getUsername() {  
        return this.username;  
    }  
  
    @JsonView(WithPasswordView.class)  
    public String getPassword() {  
        return this.password;  
    }  
}  

 

 

有這樣一個簡單的User對象,包含兩個簡單的屬性。

 

在這個對象中定義了兩個接口,其中WithoutPasswordView指的就是不帶密碼的視圖,WithPasswordView指的是帶密碼的視圖,並且繼承了WithoutPasswordView的視圖。

 

@JsonView 中的這個視圖不僅可以用接口,也可以是一般的類,或者說只要有Class屬性就能當成視圖使用。

 

類或接口間的繼承,也是視圖之間的繼承,繼承后的視圖會包含上級視圖注解的方法。

 

@JsonView 可以寫到方法上或者字段上。

 

下面通過代碼測試上面的User對象:  

 

public static void main(String[] args) throws IOException {  
    ObjectMapper objectMapper = new ObjectMapper();  
    //創建對象  
    User user = new User("isea533","123456");  
    //序列化  
    ByteArrayOutputStream bos = new ByteArrayOutputStream();  
    objectMapper.writerWithView(User.WithoutPasswordView.class).writeValue(bos, user);  
    System.out.println(bos.toString());  
  
    bos.reset();  
    objectMapper.writerWithView(User.WithPasswordView.class).writeValue(bos, user);  
    System.out.println(bos.toString());  
} 

先創建一個objectMapper,然后通過writerWithView工廠方法創建一個指定視圖的ObjectWritter,然后通過writeValue輸出結果。

輸出結果:

{"username":"isea533"}  
{"username":"isea533","password":"123456"}

@JsonView 使用起來就是這么簡單,沒有太復雜的東西。

@JsonView 屬性可以寫在注解上,這點不知道是否類似Spring中的自定義注解,如果有了解的人可以留言,謝謝。

另外在Spring-webmvc中使用@JsonView 時要注意,雖然該注解允許指定多個視圖,但是spring-webmvc只支持一個參數(視圖)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM