SpringMVC是如何過濾json資料的

2021-07-13 05:50:21 字數 3247 閱讀 7492

rt,比如我想將user物件轉換成json資料給前台,但是有一些user的屬性我不想給前台,例如密碼,建立日期等等,springmvc是如何實現的

propertyfilter propertyfilter =newpropertyfilter()

returnfalse;

}

};

this.outjson(response, users,propertyfilter);

如果你使用的 spring 版本是 4.1,並且使用 jackson 處理 json 序列化,那麼解決這個問題非常簡單。

以你問題中的例子舉例:

jackson 提供了2種註解來控制 property 是否包含在序列化的 json 中。?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

publicclassuser

@jsonignoreproperties()

publicclassuser

上面示例中,兩個註解作用是一樣的,你可以根據需要使用 @jsonignore 和 @jsonignoreproperties。

除此之外,spring 4.1 增加了 jackson @jsonview 註解的支援,對於個性化輸出就更加方便了。

以上面的例子舉例,假設a場景,需要輸出user時隱藏 password, b場景,需要隱藏createdate。

針對這個需求,使用之前的兩個註解就做不到了,而重新建乙個類或構造乙個map,這都是非常不優雅的做法。

jackson 提供了乙個 jsonview 的概念來控制 json 輸出的邏輯,改造一下 user bean。?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

publicclassuser ;

publicinte***cewithoutcreatedateview {};

@jsonview(withoutpasswordview.class)

@jsonview(withoutcreatedateview.class)

privatestring username;

@jsonview(withoutcreatedateview.class)

privatestring password;

@jsonview(withoutpasswordview.class)

privatedate createdate;

//...

}

這樣 controler 中只需要指定 jsonview 就可以控制 json 各個字段按照我們想要的方式進行序列化了。比如只輸出 username 和 createdate,隱藏 password 字段。?

1

2

3

4

5

(value ="/user", method = requestmethod.get)

@jsonview(user.withoutpasswordview.class)

publicuser getuser()

另外,如果 json 序列化邏輯過於複雜,會導致 jsonview 過多,影響**閱讀。

這個時候可以使用 jackson 提供的 mix 方案解決,將 jsonview 中的描述抽取到另乙個類中,這樣就不會影響到 user **了,

不過 spring 沒有支援,需要自己實現,下面是乙個例子。

@jsonfield(serialize=false)  我用fastjson是這麼處理的

你對SpringMvc是如何理解的?

spring mvc工作原理 springmvc是基於過濾器對servlet進行了封裝的乙個框架,我們使用的時候就是在web.xml檔案中配置dispatcherservlet類 springmvc工作時主要是通過dispatcherservlet管理接收到的請求並進行處理。具體執行流程如下 spr...

你對SpringMvc是如何理解的?

springmvc工作原理 springmvc是基於過濾器對servlet進行了封裝的乙個框架,我們使用的時候就是在web.xml檔案中配置dispatcherservlet類 springmvc工作時主要是通過dispatcherservlet管理接收到的請求並進行處理。具體執行流程如下 spri...

Spring MVC 過濾靜態資源訪問

一般來說,http 請求都會被對映到 dispatcherservlet,進而由具體的類來承接處理,但對於類似 js 或者 css 這樣的靜態資源則沒必要這樣,因為對資源的獲取只需返回資源本身即可,無需做其他處理,那麼這時就需要對一系列的資源檔案做過濾處理。首先來看 web.xml 中針對 spri...