当前位置: 首页 > news >正文

Spring Boot 注解探秘:JSON 处理的魔法世界

在 Spring Boot 应用开发中,高效处理 JSON 数据同样至关重要。Spring Boot 不仅在 Bean 管理方面表现出色,提供强大的注解系统以助力开发者轻松管理 Bean 的生命周期和依赖注入,在 JSON 数据处理上也毫不逊色。本文将深入探讨 Spring Boot 中与 JSON 处理相关的注解及其应用场景。

一、@RequestBody和@ResponseBody

@RequestBody和@ResponseBody用于controller的方法。
@RequestBody在请求的时候会自动将JSON字符串反序列化成指定对象@ResponseBody会在响应客户端请求时,自动将返回值对象序列化成JSON格式并返回
。如,
在SpringBoot项目中,@ResponseBody和@Controller一般不单独使用,而是使用@RestController,更多细节见Spring Boot 注解探秘:HTTP 请求的魅力之旅。

@RestController
@RequestMapping("/employee")
public class UserController{@PostMapping("/page-employee")Response<PageResult<Employee>> pageEmployee(@RequestBody PageParam<UserReq> pageParam)
}

二、@JsonIgnore和@JsonIgnorePropeties

@JsonIgnore和@JsonIgnorePropeties都用于在序列化和反序列化时忽略指定的字段。
@JsonIgnorePropeties可以指定多个属性,作用于类或方法上,@JsonIgnore只能指定具体的单个属性,作用于方法或者字段上。如,

@JsonPropeties(ignoreUnknown = true)
public class Employee{private String employeId;private String employeeName;private Integer employeeNo;private String phone;
}

该示例中,无论使用ObjectMapper.readValue(jsonStr, Employee.class)方法反序列化还是使用ObjectMapper.writeValueAsString(employee)序列化时,都会忽略未知的属性。

// 方式1
@JsonPropeties({'phone'})
public class Employee{private String employeId;private String employeeName;private Integer employeeNo;// 方式2@JsonIgnoreprivate String phone;
}

该示例中,方式1和方式2是等价的,在序列化Employee对象成JSON时,phone字段会被忽略。

三、@JsonPropeties和@JsonAlias

@JsonPropeties用于在序列化时,指定一个字段在JSON中的名称。
@JsonAlias刚好相反,用于在发序列化JSON时,指定一个对象的属性。
如,

public class Employee{private String employeId;private String employeeName;private Integer employeeNo;@JsonPropeties("mobile_phone")private String phone;
}

该示例中,当Employee对象被序列化成JSON时,phone字段将被命名为mobile_phone。

public class Employee{private String employeId;private String employeeName;private Integer employeeNo;@JsonAlias("mobile_phone", "iphone")private String phone;
}

该示例中,当从JSON反序列化Employee时,JSON中包含的iphone或mobile_phone字段,将被映射到为phone字段

四、@JsonFormat

用于在 JSON 序列化和反序列化过程中,指定日期和时间字段的格式,确保日期和时间字段按照指定的格式进行转换。如,

public class Employee{private String employeId;private String employeeName;private Integer employeeNo;private String phone;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private OffsetDateTime createTime;
}

该示例中,当Employee对象被序列化为JSON时,createTime字段将按照yyyy-MM-dd HH:mm:ss的格式输出。同样,在反序列化过程中,也会按照此格式将JSON中的字符串转换为OffsetDateTime对象。

五、总结

在SpringBoot项目中,上述注解在处理JSON数据时,十分高效,通过合理利用这些注解,我们可以更专注于业务逻辑的实现,提升开发效率。

http://www.lryc.cn/news/435037.html

相关文章:

  • 利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(一)
  • Linux常见指令、ls、pwd、cd、touch、mkdir、rmdir、rm等的介绍
  • 【Kubernetes】常见面试题汇总(八)
  • CentOS 7系统双网卡配置动态链路聚合(bond4)
  • ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录(失败记录)
  • 【深度学习】神经网络-怎么理解DNN、CNN、RNN?
  • 组织应在其网络安全策略中考虑MLSecOps吗?
  • Windows安装HeidiSQL教程(图文)
  • 存储课程学习笔记5_iouring的练习(io_uring,rust_echo_bench,fio)
  • 前端HTML+CSS+JS的入门学习
  • 通信电路和信道的区别与联系
  • 基于深度学习的蛋白质结构预测
  • 基于 Redis 的分布式锁实现原理及步骤
  • 21_动态规划与数据结构结合
  • React与Vue的对比
  • 精密量测软件(仿KLA免费浏览器程序ProfilmOnline)
  • Java项目: 基于SpringBoot+mybatis+maven实现的IT技术交流和分享平台(含源码+数据库+毕业论文)
  • STL02——手写简单版本的list
  • 基于SpringBoot的校园自助洗衣服务管理系统
  • 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件
  • 第 6 篇 自定义 Helm Chart
  • Jenkis部署vue前端项目提示:sh: vue-cli-service: command not found
  • 中介者模式mediator
  • GO语言性能分析
  • 关于 PreparedStatement
  • 漫谈设计模式 [9]:外观模式
  • 多进程编程
  • 7-Zip压缩包如何添加密码,加密后如何取消
  • HarmonyOS---应用测试概述
  • 密码学---真题演练