同一個對象,在不同的場景,返回不同的屬性,如getUserById返回User對象包含password值,而getAllUsers返回User集合,不包含password值(通過接口查看顯示,序列化的時候直接忽略該屬性,而非返回null),這些場景稱為視圖,使用JsonView:
三個步驟:
1.通過在對象中定義多個接口來定義多個視圖(場景),注:子接口會把繼承的父接口展示的屬性也展示
2.在屬性的get方法上指明視圖(場景)
3.在controller方法上指定視圖(場景)
package
com.example.security.entity
;
import
com.fasterxml.jackson.annotation.
JsonView
;
public class
User {
/**
* 步驟1
*/
public interface
UsernameView {}
public interface
UsernamePasswordView
extends
UsernameView {}
private
String
username
;
private
String
password
;
/**
* 步驟2
*
@return
*/
@JsonView
(UsernameView.
class
)
public
String
getUsername
() {
return
username
;
}
public void
setUsername
(String username) {
this
.
username
= username
;
}
/**
* 步驟2
*
@return
*/
@JsonView
(UsernamePasswordView.
class
)
//子接口會展示自己注解的屬性和其父接口注解的屬性
public
String
getPassword
() {
return
password
;
}
public void
setPassword
(String password) {
this
.
password
= password
;
}
}
/**
* 步驟3
*
@return
*/
@RequestMapping
(
"/users"
)
@JsonView
(User.UsernameView.
class
)
public
List<User>
users
() {
return
Arrays.
asList
(
new
User(
"wzs"
,
"923286"
)
,
new
User(
"wmm"
,
"mm615678"
)
,
new
User(
"root"
,
"iMC123"
))
;
}
@GetMapping
(
"/user"
)
@JsonView
(User.UsernamePasswordView.
class
)
public
User
user
(User user) {
return
user
;
}