记录下@JsonView注解的使用

1. 简单使用

@Data
@AllArgsConstructor
public class User {

    @JsonView(UserViews.UserSimpleView.class)
    private Long id;

    @JsonView(UserViews.UserSimpleView.class)
    private String name;

    @JsonView(UserViews.UserDetailView.class)
    private String password;
    }

一个User类,如果在视图层不想返回password

  1. 一般会创建UserVo类,使用BeanUtils.copyProperties()复制相关属性并返回

  2. 也可以在对应的Mapping下使用@JsonView(UserViews.UserSimpleView.class)

  @JsonView是jackson json中的一个注解,Spring mvc同样支持这个注解,
  它的作用就是控制输入输出后的json。
public interface UserViews {

    interface UserView {
    }

    interface UserSimpleView extends UserView {
    }

    interface UserDetailView extends UserView, UserSimpleView {
    }
            }

2.稍微复杂使用

@Data
@AllArgsConstructor
public class User {

    @JsonView(UserViews.UserSimpleView.class)
    private Long id;

    @JsonView(UserViews.UserSimpleView.class)
    private String name;

    @JsonView(UserViews.UserDetailView.class)
    private String password;

    @JsonView(UserViews.UserDeptView.class)
    private Dept dept;

    @JsonView(UserViews.UserRoleView.class)
    private Role role;
}

这里想返回user,dept,role的信息,分别在相应类中加上注解,在写个接口继承各自的view

public interface UserViews {

    interface UserView {
    }

    interface UserSimpleView extends UserView {
    }

    interface UserDetailView extends UserView, UserSimpleView {
    }

    interface UserDeptView extends UserView, UserSimpleView, DeptViews.DeptView {
    }

    interface UserRoleView extends UserView, RoleViews.RoleView {
    }

    interface UserDeptRoleView extends UserView, UserDeptView, UserRoleView {
    }
}
public interface ResultViews {
    interface ResultView {
    }

    interface ResultUserDeptRoleView extends ResultView, UserViews.UserDeptRoleView {
    }
}
@RestController
public class TestController {

    @GetMapping
    @JsonView(ResultViews.ResultUserDeptRoleView.class)
    public User getUser() {

        return new User(1L, "张三", "123***", new Dept(1L, "dept1"), new Role(1L, "Java"));

    }

}

最终返回的结果如下:

{
id: 1,
name: "张三",
dept: {
        id: 1,
       name: "dept1"
     },
role: {
        id: 1,
       name: "Java"
     }
}

就到这里了,有不对的地方欢迎批评指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值