rt,比如我想將user物件轉換成json資料給前台,但是有一些user的屬性我不想給前台,例如密碼,建立日期等等,springmvc是如何實現的
propertyfilter propertyfilter =
new
propertyfilter()
return
false
;
}
};
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
public
class
user
@jsonignoreproperties
()
public
class
user
上面示例中,兩個註解作用是一樣的,你可以根據需要使用 @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
public
class
user ;
public
inte***ce
withoutcreatedateview {};
@jsonview
(withoutpasswordview.
class
)
@jsonview
(withoutcreatedateview.
class
)
private
string username;
@jsonview
(withoutcreatedateview.
class
)
private
string password;
@jsonview
(withoutpasswordview.
class
)
private
date createdate;
//...
}
這樣 controler 中只需要指定 jsonview 就可以控制 json 各個字段按照我們想要的方式進行序列化了。比如只輸出 username 和 createdate,隱藏 password 字段。?
1
2
3
4
5
(value =
"/user"
, method = requestmethod.get)
@jsonview
(user.withoutpasswordview.
class
)
public
user 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...