大数跨境
0
0

高级开发!Spring Boot + JsonNode 动态处理请求/响应属性值

高级开发!Spring Boot + JsonNode 动态处理请求/响应属性值 Spring全家桶实战案例
2025-07-08
0
导读:高级开发!Spring Boot + JsonNode 动态处理请求/响应属性值
Spring Boot 3实战案例锦集PDF电子书已更新至130篇!
图片

🎉🎉《Spring Boot实战案例合集》目前已更新141个案例,我们将持续不断的更新。文末有电子书目录。

💪💪永久更新承诺

我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务

💌💌如何获取
订阅我们的合集点我订阅,并通过私信联系我们,我们将第一时间将电子书发送给您。

→ 现在就订阅合集

环境:SpringBoot3.4.2



1. 简介

在Spring Boot应用开发中,Controller层通常直接使用业务对象(如User、Order等)作为参数和返回值。这种方式虽然简洁直观,但在面对复杂业务场景时存在明显局限:无法实现字段级的动态处理、敏感信息过滤等需求。传统解决方案需要在每个业务方法中编写重复的数据转换代码,或者创建大量仅用于数据展示的DTO类,导致代码臃肿和维护困难。

基于上面的问题,本篇文章巧利用Jackson的 JsonNode 树形数据结构作为中间处理层。通过在参数解析阶段将请求体转换为JsonNode进行预处理,再转为业务对象;在响应阶段将业务对象转为JsonNode进行后处理,最后生成响应。这样既保持了Controller层使用业务对象的简洁性,又获得了JSON层面的动态处理能力,实现了鱼与熊掌兼得的优雅解决方案。

如下代码及示例演示了最终的效果:

@PostMapping("/update")@PackResponse(excludes = {"password""idNo""email"})public User update(    @PackBody(excludes = { "password""idNo" })     @Validated User user, Errors error) {  if (error.hasErrors()) {    List<String> errMsg = error.getFieldErrors().stream().map(err -> err.getField() + "," + err.getDefaultMessage()).toList() ;    throw new BusinessException(errMsg) ;  }  return user ;}

通过自定义注解 @PackBody,可对请求数据进行控制,支持设置需排除的字段;而 @PackResponse 注解则用于控制响应数据,同样能够指定不输出的字段。此外,该方案还支持基于注解实现参数验证。

当字段校验不通过时:

接下来我们将详细的完成上面的功能。

2.实战案例

【声明】内容源于网络
0
0
Spring全家桶实战案例
Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
内容 832
粉丝 0
Spring全家桶实战案例 Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
总阅读195
粉丝0
内容832