前情摘要

上回说道,小明同学用@JsonProperty解决了,在接口通讯中的Json反序列化问题。经过研究,小明发现@JsonProperty在特定场景下,还有更人性化的作用。并且在项目中相继使用了@JsonIgnore和@NotNull两兄弟。下面继续场景分析。

场景分析一

小明做了一个web表单,用来填写并保存数据,后台写restful接口接收数据并保存。写完之后让老大review的时候,自信满满的小明,又收到了很多comment。小明看到了这些comment发现确实有不足之处,比如表单里的有些数据是必须不为空的,虽然在页面上加上了强校验(Js校验),但是后台接口是对外开放的restful接口,别人不走页面直接访问接口存储数据,这时候页面的校验就显得很尴尬了,小明又想这好办啊,直接拿接收到的参数进行非空判断不就行了么,其实也是可以的,但是小明在研究@JsonProperty的时候发现@NotNull正好解决这个问题。代码展示如下:

Student类

public class Student {@JsonProperty(value="real_name")private String name ;@NotNull(message="idcard is not null")private String idCard;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getIdCard() {return idCard;}public void setIdCard(String idCard) {this.idCard = idCard;}}

StudentController.java(注:这里为了测试方便未按照标准的restApi书写,如需学习标准的restful接口风格请移步百度。请见谅)

@RestController
public class StudentController {@RequestMapping(value="/student",method=RequestMethod.POST)public Student save(@RequestBody @Valid Student student) {return student;}
}

Postman测试如下:(条件是:正常输入real_name和idCard,返回结果正常)

Postman测试结果如下(条件:只写real_name,不填写idCard。报错)

注意接口书写时,用@RequestBody接收输入参数时,这时候也需要匹配你预先定义的@JsonProperty的值。参考real_name.并且,在参数前需要加上@Valid,你定义的@NotNull校验才会生效。

@JsonProperty(value="real_name")
private String name ;

场景分析二

idCard为用户的敏感信息,在接口返回数据中不能展示出来,以免用户敏感信息直接暴露在外。这时候,小明想到了另外一个注解,@JsonIgnore,在Student对象序列化为json数据的返回的时候,忽略该属性。代码及测试如下:

 @JsonProperty(value="real_name")private String name ;@JsonIgnoreprivate String idCard;

Postman测试如下(条件:正常输入real_name和idCard,观察返回数据,只包含real_name)

场景分析三

在场景二中提到使用@JsonIgnore可以让接口在返回数据的时候不序列化一些属性。但是小明又想了,若场景一和场景二结合使用,及在用户输入表单保存数据的时候,某个字段不能为空,并且返回数据的时候又不能包含该属性,是不是可以使用组合注解@JsonIngore和@NotNull呢,代码和测试结果如下:

 @JsonProperty(value="real_name")private String name ;@JsonIgnore@NotNull(message="idcard is not null")private String idCard;

Postman测试结果如下(条件:idCard及为上述特殊字段,结果报错)

经过尝试,小明想到了如下解决方案,代码及测试结果如下:

   @JsonProperty(value="real_name")private String name ;@JsonProperty(access=Access.WRITE_ONLY)@NotNull(message="idcard is not null")private String idCard;

Postman测试结果如下(条件:用JsonProperty代替JsonIgnore)

成功实现需求。

场景分析四

由于小明公司秉承尽最大努力少使用第三方的资源的原因,项目中关于JsonObject相关的jar都是使用的org.json,并未使用阿里的fastjson,如果项目使用的是fastjson,再使用上述的注解就不起作用了,它有自己的一套注解来解决上述问题,如:@JSONField,具体可参考com.alibaba.fastjson.annotation包。感兴趣的可以查一下。如有问题欢迎交流和分享。

@JsonProperty,@NotNull,@JsonIgnore的具体使用相关推荐

  1. jackson 的注解:@JsonProperty、@JsonIgnore、@JsonFormat 用法说明

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 导包: <dependency><groupId>com.faster ...

  2. jackson中@JsonProperty、@JsonIgnore等常用注解总结

    最近用的比较多,把json相关的知识点都总结一下,jackjson的注解使用比较频繁, jackson的maven依赖 <dependency> <groupId>com.fa ...

  3. 仅在序列化过程中使用@JsonIgnore,而不是反序列化

    本文翻译自:Only using @JsonIgnore during serialization, but not deserialization I have a user object that ...

  4. 注释嵌套注释_注释梦Night

    注释嵌套注释 @XmlElementWrapper(name="orders") @XmlJavaTypeAdapter(OrderJaxbAdapter.class) @XmlE ...

  5. json解析工具之jackson的常用实例

    Jackson 简介:   解析大的 json 文件速度比较快:Jackson 运行时占用内存比较低,性能比较好:Jackson 有灵活的 API,可以很容易进行扩展和定制.springMVC这样成熟 ...

  6. 尚硅谷B2C电商毕设微服务项目中所用注释总结

    周青的总结记录 文章目录 前言 正文 通用服务 commons @Data @TableName @TableId @TableField @JsonProperty @NotNull @NotBla ...

  7. Linux查询端口和进程相关命令

    Linux查询端口和进程相关命令 https://www.cnblogs.com/zjdxr-up/p/8408885.html 香吧香 博客园 首页 联系 管理随笔 - 247 文章 - 4 评论 ...

  8. @JsonInclude @JsonIgnore@JsonIgnoreProperties @JsonProperty 作用

    @JsonInclude 应用范围:  注解 方法 字段 接口 方法参数 作用: 作用过在类上, 如果类中的字段值为Null 则返回值中不包含Null值字段 代码示例: Demo1: @Data @J ...

  9. springboot的jackson的特有注解 @JsonIgnore, @JsonProperty等

    一. 概述 1.常用框架 阿里 fastjson,谷歌gson等 JavaBean序列化为Json,性能:Jackson > FastJson > Gson > Json-lib 同 ...

最新文章

  1. 给你30秒的时间,你会用Excel制作出一个抽奖功能吗?
  2. spring框架注解多?注解到底是个什么东西?这篇文章给你讲明白
  3. 解方程 2014NOIP提高组 (数学)
  4. 清华大学计算机系牛人,高考状元不靠加分靠实力
  5. oracle查询表字段和备注,Oracle 查询表信息(字段+备注)
  6. flash html5 chrome,为了支持 HTML5 ,谷歌 Chrome 浏览器将“封杀”Flash
  7. 破解class文件的第一步:深入理解JAVA Class文件
  8. 导出标签_如何从系统导出审计要求的日记账
  9. 第 6 章 本地方法接口
  10. 共同努力做好NBear!
  11. ubuntu16.04 安装kicad5.1
  12. 深度学习的深度和宽度的理解
  13. 基于联咏NT98528_IMX335_开发IPC模组实测_视频截图
  14. 光学动作捕捉系统原理
  15. Android脱壳工具整理
  16. 值得学习的开源web项目
  17. java实现的五子棋
  18. via ladder
  19. S11、反射系数、回损、VSWR之间的换算
  20. 使用JFreeChart绘制2D和3D折线图

热门文章

  1. 【BZOJ 3527】 [Zjoi2014]力
  2. Flutter中的日期时间选择器
  3. python怎么通过手机号定位_python 通过手机号识别出对应的微信性别(实例代码)
  4. 面试必备:秒杀场景九个细节
  5. Planet 遥感卫星--Planet labs 卫星星座介绍与应用--以2019年8月山东寿光水灾监测为例
  6. Discuz任意文件删除
  7. Windows超级管理器#这可能是东半球最具颜值的系统管理工具
  8. mysql创建数据库CREATE DATABASE
  9. spring boot毕业设计项目源码基于SpringBoot在线电影订票|影院购票系统
  10. Python开源项目(GitHub上Stars最多的10个开源Python项目)