业务场景:比如说一个User对象,有两个字段,一个username,一个password,有一个获取用户信息的接口要返回这个User列表,但是不想要这个User列表的password字段。
还有一个接口要获取这个User列表,要全部字段。
解决场景:我们可以有多种方法,比如说获取list之后把user列表的密码全部设为空,然后再用其他注解来设置 为空的字段不显示
还可以在sql中就不查password字段。
但是 我们要介绍这个注解来实现这个功能。@jsonView
需要三步即可:
- 第一:用接口来声明多个视图
- 第二:在值对象的get方法上指定视图
- 第三:在controller方法上指定视图
话不多说~~~看代码------》
User.java
package com.imooc;import com.fasterxml.jackson.annotation.JsonView;import lombok.AllArgsConstructor;import lombok.Setter;/** * Created by 敲代码的卡卡罗特 * on 2018/4/14 22:58. */@Setter@AllArgsConstructorpublic class User { ???public interface UserInfo{}; ???public interface UserDetail extends UserInfo{}; ???private String name; ???private String password; ???@JsonView(UserInfo.class) ???public String getName() { ???????return name; ???} ???@JsonView(UserDetail.class) ???public String getPassword() { ???????return password; ???}}
在user对象中声明两个接口(视图),一个继承另一个,你懂得!!!然后在字段的get方法上声明视图
Controller.java
@GetMapping("/hello") ???@JsonView(User.UserInfo.class) ???public HashMap hello() { ???????HashMap hashMap = new HashMap(); ???????User user1 = new User("liu","123"); ???????User user2 = new User("zhang","456"); ???????hashMap.put("u1",user1); ???????hashMap.put("u2",user2); ???????return hashMap; ???}
在controller中声明视图 自己看下结果吧。
利用@jsonView注解来实现自定义返回字段
原文地址:https://www.cnblogs.com/coder-lzh/p/8836617.html