@JsonView注解的简单使用
@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注解的简单使用相关推荐
- 在Spring项目中使用@Scheduled注解定义简单定时任务
如题所示,有时候我们需要在Web项目中配置简单的定时任务,而且因为任务并不复杂不想使用定时调度框架(PS:Quartz.ActiveMQ .Kafka等),这时就可以考虑使用@Scheduled注解来 ...
- java excel 注解_Java注解--实现简单读取excel
实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Retentio ...
- ajax注解解决中文乱码,基于注解的简单MVC框架的实现,以及jquery,prototype,ajax传输乱码问题的一点解决方法...
1:基于注解的简单MVC框架的实现 效果:1:用户只需要定义一些普通的java类来做为M层,也就是STRUTS的action类,该类里包含1到 N个控制方法,每个方法需要的form数据,由注解@Act ...
- java 读取 excel 注释_java利用注解实现简单的excel数据读取
搜索热词 实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Ret ...
- @NotNull 等注解的简单使用
springboot 2.3.0 以后不会自动引入jar包,所以要添加以下maven 2.3以前则不需要引入maven包 <dependency><groupId>org.sp ...
- 【Java 注解】自定义注解 ( 使用注解实现简单测试框架 )
文章目录 一.定义注解 二.使用注解 三.解析注解 在 [Java 注解]自定义注解 ( 注解属性定义与赋值 ) 博客中讲解了 注解属性 ; 在 [Java 注解]自定义注解 ( 元注解 ) 博客中讲 ...
- java 封装优化工具_利用Java注解的简单封装的一次优化
悟红尘:zhuanlan.zhihu.com 在我们的项目中和后台的通信的时候,为了防止别人截获并篡改信息,于是决定启用一套自己验签规则,那就是将所有属性的值拼接起来进行SHA256签名,在这个字符 ...
- 利用@jsonView注解来实现自定义返回字段
业务场景:比如说一个User对象,有两个字段,一个username,一个password,有一个获取用户信息的接口要返回这个User列表,但是不想要这个User列表的password字段. 还有一个接 ...
- @configurationproperties注解的使用_SpringBoot常用注解的简单理解
不定时更新... 文章目录 Spring容器 JavaBean POJO @Autowired @Controller @Resource @RestController @Service @Repo ...
最新文章
- sqlalchemy 查询结果 RowProxy 转 list
- php常用过滤htmlspecialchars() 函数把预定义的字符转换为 HTML 实体
- sqlserver查询当月的每一天_SQL生成一年每一天的时间列表的几种方法
- C/C++头文件一览表
- 前端学习(159):meta
- 专题开发十二:JEECG微云快速开发平台-基础用户权限
- 开发到底要不要自己做测试?
- SAP License:未分配差异新解
- 工大瑞普Dynamips如何保存交换机路由器配置
- [转载]Coursera课程批量下载(保持资源原目录结构)
- 个人业务网站php源码,最新个人发卡网源码,PHP运营级个人自动发卡平台完整源码...
- 规划控制下的二阶段设计理论 -【多核服务价值链协同】
- matplotlib折线图(标记点、标记点大小、标记点边颜色、标记点边宽)
- 或许,这是最好的一款微信公众号编辑器!
- 计算机网络基础知识应用题,【推荐】计算机网络技术与应用题库答案.docx
- 微信公众号JS屏蔽分享,复制链接等
- Windows安装配置Oracle
- 微分,梯度及梯度下降法
- 高德地图看各省分界线_从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运行...
- 大学生学完python靠几个接单网站兼职,实现经济独立
热门文章
- HPU组队选拔赛(三)FZU - 2261【最短路】
- 基于基于粒子群优化算法的微电网调度(Matlab代码实现)
- 主要内容: 本文提出了一种基于(ppo)的微电网最优调度方法。 该方法采用强化学习(RL)来学习调度策略,并积累相应的调度知识。 同时,引入ppo模型,将微电网调度策略动作从离散动作空间扩展到连续动作
- nodejs+vue+elementui幼儿园管理系统python java php
- 51nod 3144 超级购物
- AppStore被Rejected 的各种原因
- 每天和琦琦学点新知识_算法
- coco 数据集 标签 80种类 中英文对照
- SCI、EI论文检索及论文的主要的获取方式
- GitHub开源力作!最新旧照片修复技术:细致到面部毛孔