@JsonView注解的使用

简介

  • @JsonView是jackson json中的一个注解,Spring MVC也支持这个注解,它的作用就是控制输入输出后的json的属性种类
  • @JsonView注解可以将对象的属性分成不同的组,这些组称之为view。view 是开发人员定义的空类/接口。可以根据不同的用途使用不同的 view。可用于序列化和反序列化
  • @JsonView可以使用在属性上,也可以使用在类级别上。

举例说明

假设我们有个用户类,其中的属性有用户名和密码。那么通常我们不使用@JsonView注解的时候序列化都是把密码序列化的。但是一般情况我们都不希望密码暴露,但有时候又会想去传输密码。那么现在就需要两种view来进行传输。其中一种只有用户名,另一种在用户名的基础上还包括了密码。

这个是@JsonView注解就很容易的实现这个。

使用一

根据上述的例子,通过@JsonView去实现

  • 用户类

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {// 定义一个接口,表示视图,用户区分属性public interface UserSimpleView {};// 第二个接口是在第一个视图上加上了该视图所特有的属性public interface UserDetailView extends UserSimpleView {};// 使用@JsonView注解,表示这个属性在哪个视图中@JsonView(UserSimpleView.class)private String name;@JsonView(UserDetailView.class)private  String password;
    }
    
  • 在controller方法上指定视图

    @GetMapping("/findUserBySimpleView")
    // 在不同情况下使用不同接口
    @JsonView(User.UserSimpleView.class)
    public User findUserBySimpleView(@RequestParam(value="id")String number) {User user=new User();user.setPassword(number);user.setName("cvzhanshi");return user;
    }
    @JsonView(User.UserDetailView.class)
    @GetMapping("/findUserByDetailView")
    public User findUserByDetailView(@RequestParam(value="id")String number) {User user=new User();user.setPassword(number);user.setName("cvzhanshi");return user;
    }
    
  • 结果

    • 第一个接口返回值

      {"name": "cvzhanshi"
      }
      
    • 第二个接口返回值

      {"name": "cvzhanshi","password": "123"
      }
      

如此便很轻易的实现了分情况返回视图

使用二

第二种使用方法也是我在工作中看到两句不懂的代码,百度学习到的。刚好也介绍一下。

ObjectMapper om = new ObjectMapper();

om.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);

代码示例

  • 实体类是使用一相同
public class MainSummaryViewDeserialization {public static void main(String[] args) throws JsonProcessingException {User user = new User("cvzhanshi", "123456");System.out.println("---------------不使用om---------------");System.out.println(user.toString());ObjectMapper om = new ObjectMapper();System.out.println("---------------使用om,不使用view---------------");String asString = om.writeValueAsString(user);System.out.println(asString);om.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);System.out.println("---------------使用om,UserSimpleView,---------------");String simpleString = om.writerWithView(User.UserSimpleView.class).writeValueAsString(user);System.out.println(simpleString);System.out.println("---------------使用om,UserDetailView,---------------");String detailString = om.writerWithView(User.UserDetailView.class).writeValueAsString(user);System.out.println(detailString);}
}

输出结果

---------------不使用om---------------
User(name=cvzhanshi, password=123456)
---------------使用om,不使用view---------------
{"name":"cvzhanshi","password":"123456"}
---------------使用om,UserSimpleView,---------------
{"name":"cvzhanshi"}
---------------使用om,UserDetailView,---------------
{"name":"cvzhanshi","password":"123456"}

总结

不管那种使用方法,它的作用就是控制输入输出后的json的属性种类。通过@JsonView来控制传出去,传进来的实体类属性

@JsonView注解的简单使用相关推荐

  1. 在Spring项目中使用@Scheduled注解定义简单定时任务

    如题所示,有时候我们需要在Web项目中配置简单的定时任务,而且因为任务并不复杂不想使用定时调度框架(PS:Quartz.ActiveMQ .Kafka等),这时就可以考虑使用@Scheduled注解来 ...

  2. java excel 注解_Java注解--实现简单读取excel

    实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Retentio ...

  3. ajax注解解决中文乱码,基于注解的简单MVC框架的实现,以及jquery,prototype,ajax传输乱码问题的一点解决方法...

    1:基于注解的简单MVC框架的实现 效果:1:用户只需要定义一些普通的java类来做为M层,也就是STRUTS的action类,该类里包含1到 N个控制方法,每个方法需要的form数据,由注解@Act ...

  4. java 读取 excel 注释_java利用注解实现简单的excel数据读取

    搜索热词 实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Ret ...

  5. @NotNull 等注解的简单使用

    springboot 2.3.0 以后不会自动引入jar包,所以要添加以下maven 2.3以前则不需要引入maven包 <dependency><groupId>org.sp ...

  6. 【Java 注解】自定义注解 ( 使用注解实现简单测试框架 )

    文章目录 一.定义注解 二.使用注解 三.解析注解 在 [Java 注解]自定义注解 ( 注解属性定义与赋值 ) 博客中讲解了 注解属性 ; 在 [Java 注解]自定义注解 ( 元注解 ) 博客中讲 ...

  7. java 封装优化工具_利用Java注解的简单封装的一次优化

    悟红尘:​zhuanlan.zhihu.com 在我们的项目中和后台的通信的时候,为了防止别人截获并篡改信息,于是决定启用一套自己验签规则,那就是将所有属性的值拼接起来进行SHA256签名,在这个字符 ...

  8. 利用@jsonView注解来实现自定义返回字段

    业务场景:比如说一个User对象,有两个字段,一个username,一个password,有一个获取用户信息的接口要返回这个User列表,但是不想要这个User列表的password字段. 还有一个接 ...

  9. @configurationproperties注解的使用_SpringBoot常用注解的简单理解

    不定时更新... 文章目录 Spring容器 JavaBean POJO @Autowired @Controller @Resource @RestController @Service @Repo ...

最新文章

  1. sqlalchemy 查询结果 RowProxy 转 list
  2. php常用过滤htmlspecialchars() 函数把预定义的字符转换为 HTML 实体
  3. sqlserver查询当月的每一天_SQL生成一年每一天的时间列表的几种方法
  4. C/C++头文件一览表
  5. 前端学习(159):meta
  6. 专题开发十二:JEECG微云快速开发平台-基础用户权限
  7. 开发到底要不要自己做测试?
  8. SAP License:未分配差异新解
  9. 工大瑞普Dynamips如何保存交换机路由器配置
  10. [转载]Coursera课程批量下载(保持资源原目录结构)
  11. 个人业务网站php源码,最新个人发卡网源码,PHP运营级个人自动发卡平台完整源码...
  12. 规划控制下的二阶段设计理论 -【多核服务价值链协同】
  13. matplotlib折线图(标记点、标记点大小、标记点边颜色、标记点边宽)
  14. 或许,这是最好的一款微信公众号编辑器!
  15. 计算机网络基础知识应用题,【推荐】计算机网络技术与应用题库答案.docx
  16. 微信公众号JS屏蔽分享,复制链接等
  17. Windows安装配置Oracle
  18. 微分,梯度及梯度下降法
  19. 高德地图看各省分界线_从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运行...
  20. 大学生学完python靠几个接单网站兼职,实现经济独立

热门文章

  1. HPU组队选拔赛(三)FZU - 2261【最短路】
  2. 基于基于粒子群优化算法的微电网调度(Matlab代码实现)
  3. 主要内容: 本文提出了一种基于(ppo)的微电网最优调度方法。 该方法采用强化学习(RL)来学习调度策略,并积累相应的调度知识。 同时,引入ppo模型,将微电网调度策略动作从离散动作空间扩展到连续动作
  4. nodejs+vue+elementui幼儿园管理系统python java php
  5. 51nod 3144 超级购物
  6. AppStore被Rejected 的各种原因
  7. 每天和琦琦学点新知识_算法
  8. coco 数据集 标签 80种类 中英文对照
  9. SCI、EI论文检索及论文的主要的获取方式
  10. GitHub开源力作!最新旧照片修复技术:细致到面部毛孔