SpringMVC过滤,或序列化时指定返回对象的某些属性,以及Jackson的相关注解使用


SpringMVC过滤(指定返回)对象的某些属性

想要了解Jackson相关注解可以直接到第二部分

为什么要过滤对象的某些属性

  1. 场景:在平时写代码的时候会遇到这样的情况,有实体类,User,这里面定义了User相关的所有信息,同时需要对外开放接口查询获得用户的信息,但是要根据信息的不同,写查询不同的信息的接口,分情况返回数据
  2. 我需要用户的基本信息,用户名,等级,头像,个人介绍之类的数据,那么不能将密码,余额之类的返回给前端,那么就需要在返回数据的时候过滤掉不需要返回的属性
  3. 使用工具:SpringMVC以及SpringMVC默认的Json解析,Jackson即可

方法以及代码如下

实体类代码

@Data
public class User {
   
   


    private String username;

    private String password;

    private Date brithday;

    private String headImage;

    private Integer account;
    
    private String address;
    
    private String mobile;
}

Controller代码

@RestController
@RequestMapping("/user/")
public class UserController {
   
   



    /**
     * 获取用户基础信息
     * @param username
     * @return
     */
    @GetMapping("base")
    public User getUserBaseInfo(String username){
   
   
        return User.builder().username("sa").account(213).headImage("http://sss.ss.com").
                address("石家庄").password("123456").mobile("13776684587").build();
    }

    /**
     * 获取用户收货地址信息
     * @param username
     * @return
     */
    @GetMapping("address")
    public User getUserAddressInfo(String username){
   
   
        return User.builder().username("sa").account(213).headImage("http://sss.ss.com").
                address("石家庄").password("123456").mobile("13776684587").build();
    }

    /**
     * 获取用户密码信息
     * @param username
     * @return
     */
    @GetMapping("pass")
    public User getUserLoginInfo(String username){
   
   
        return User.builder().username("sa").account(213).headImage("http://sss.ss.com").
                address("石家庄").password("123456").mobile("13776684587").build();
    }
}

相关方法以及注解,以及优劣

使用Jackson注解:@JosnIgnore

  1. 该注解一般使用在成员变量上,表示,在Jackson序列化的时候,忽略该属性。
  2. 使用情况:一些不需要返回给前端的属性可以使用该注解忽略掉
@Data
@Builder
public class User {
   
   
    private String username;
    @JsonIgnore
    private String password;
    private Date brithday;
    private String headImage;
    @JsonIgnore
    private Integer account;
    @JsonIgnore
    private String address;
    @JsonIgnore
    private String mobile;

}
  1. 将不需要返回的属性在实体类标注出来,即可,弊端:忽略效果,全局起效,每个接口都会忽略掉该属性

使用注解@JsonView

  1. 该注解用于指定,序列化的视图规则,用于两个地方,一个是实体类的属性上,另外一个是controller的接口方法上
  2. 使用:
    2.1 首先需要先建立视图(可以在实体类内部创立,也可以单独创建视图类)
private interface BaseView{
   
   }

    @JsonView(User.BaseView
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值