@JsonView是jackson json中的一个注解,Spring webmvc也支持这个注解。源码如下:

@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD,ElementType.PARAMETER, // since 2.5ElementType.TYPE // since 2.9, to indicate "default view" for properties
})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonView {/*** View or views that annotated element is part of. Views are identified* by classes, and use expected class inheritance relationship: child* views contain all elements parent views have, for example.*/public Class<?>[] value() default { };
}

此注解的主要用途就是当你返回实体类时去除敏感信息。比如:有个user表里面有个pwd字段,查询出user后,不想返回pwd字段。可以使用此注解去除pwd字段。

使用如下:

@Data
public class User {public interface BaseView{}public interface DetailView extends BaseView{}@JsonView(BaseView.class)private String id;@JsonView(BaseView.class)private String name;@JsonView(DetailView.class)private String pwd;
}

BaseView作为基础视图,DetailView作为详细视图。Detail继承了BaseView,也就是说DetailView会返回所有被@JsonView(BaseView.class)注解了的实例变量。该User实体类中,id和name使用了@JsonView(BaseView.class),pwd使用了@JsonView(DetailView.class)。

在Controller层中的方法上,使用两种视图也是使用JSONView注解。具体如下:

    @GetMapping("getAllUser")@ResponseBody@JsonView(User.DetailView.class)public List<User> getAllUser(){List<User> userList = new ArrayList<>();User user1 = new User("1", "Cauchy6317", "123456");User user2 = new User("2", "CJ", "123456789");userList.add(user1);userList.add(user2);return userList;}
使用@JsonView(User.DetailView.class)就会返回所有的实例变量,使用@JsonView(User.BaseView.class)就会id和name。

使用过程中注意一点:实体的所有变量都要被JsonView注解一下,如果上例的pwd没有使用JsonView注解的话,BaseView也会无法使用。

看看源码,@Target中有句ElementType.PARAMETER, // since 2.5,这是放在方法参数上的,具体什么情景下使用,我也没遇到。还有一句ElementType.TYPE // since 2.9, to indicate "default view" for properties,意思是说放在实体类上作为一种默认的视图。比如我们上面的User实体类,在实体类上加上@JsonView(User.BaseView.class),这就是表明凡是返回User的地方如果没有显示指定所需要返回的视图,则默认使用BaseView视图。

有帮助的话,记得点赞关注哈。打赏是对我最大的鼓励!

JsonView用法相关推荐

  1. Ajax是什么?Ajax高级用法之Axios技术

    Ajax AJAX 异步请求局部刷新 Ajax 参数详解 js.json.jsonp区别 json和jsonp的区别 同源策略 json和js对象的区别 Ajax高级用法(axios) 为什么要用Ax ...

  2. Spring MVC注解@Valid、@JsonSerialize、@JsonView等

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/yuchao2015/article/details/78695954 @Valid Spring MVC采 ...

  3. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  4. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  5. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  6. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  7. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  8. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  9. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  10. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

最新文章

  1. OpenKruise v0.10.0 新特性 WorkloadSpread 解读
  2. matlab矩阵按坐标取,在Matlab中获取inlier点的坐标(Get coordinates of inlier points in Matlab)...
  3. C#实现RTP数据包传输
  4. 傅里叶变换matlab案例,基于matlab的傅里叶变换
  5. Kubernetes学习总结(14)—— Kubernetes 实用命令总结
  6. 特性Attibute定义和使用
  7. web后端本地开发(同步线上)环境搭建
  8. python运行需要网络吗_python邮件和网络的简单使用
  9. 1-docker安装
  10. 【190302】VC+ 视频捕捉与录像+实例源码源代码
  11. ubuntu磁盘清理
  12. Weighted Boxes Fusion加权检测框合并
  13. oracle占位符怎么打,oracle所支持的占位符是什么
  14. CubeMXIDE 汉化
  15. 在Microsoft Office、Visio、WPS中用LaTeX的方式编辑公式
  16. SVAC1.0帧内预测技术分析
  17. 51单片机LCD1602的使用
  18. vant表单checkbox验证问题
  19. Python基础 | Python的组合数据类型
  20. #7.白盒测试:控制流测试

热门文章

  1. 《Python黑帽子》学习笔记
  2. 计算机释放内存的命令,如何设置电脑Win7自动释放内存空间?
  3. JWT-JSON WEB TOKEN使用详解及注意事项
  4. springboot健康饮食管理系统
  5. 智能浪潮:增强时代来临
  6. iOS软件开发揭密:iPhoneiPad企业应用和游戏开发(china-pub首发)
  7. 330UF16V 10*7.7片式铝电解电容封装
  8. 计算机应用论文投稿模板,标准期刊论文格式模板
  9. 内核启动流程分析----内核启动
  10. 基于python进行小波分析,频率谱分析