🎉🎉《Spring Boot实战案例合集》目前已更新141个案例,我们将持续不断的更新。文末有电子书目录。
💪💪永久更新承诺
我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务。
💌💌如何获取
订阅我们的合集《点我订阅》,并通过私信联系我们,我们将第一时间将电子书发送给您。
环境:SpringBoot3.4.2
1. 简介
在Spring Boot应用开发中,Controller层通常直接使用业务对象(如User、Order等)作为参数和返回值。这种方式虽然简洁直观,但在面对复杂业务场景时存在明显局限:无法实现字段级的动态处理、敏感信息过滤等需求。传统解决方案需要在每个业务方法中编写重复的数据转换代码,或者创建大量仅用于数据展示的DTO类,导致代码臃肿和维护困难。
基于上面的问题,本篇文章巧利用Jackson的 JsonNode 树形数据结构作为中间处理层。通过在参数解析阶段将请求体转换为JsonNode进行预处理,再转为业务对象;在响应阶段将业务对象转为JsonNode进行后处理,最后生成响应。这样既保持了Controller层使用业务对象的简洁性,又获得了JSON层面的动态处理能力,实现了鱼与熊掌兼得的优雅解决方案。
如下代码及示例演示了最终的效果:
("/update")(excludes = {"password", "idNo", "email"})public User update((excludes = { "password", "idNo" })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 注解则用于控制响应数据,同样能够指定不输出的字段。此外,该方案还支持基于注解实现参数验证。
当字段校验不通过时:
接下来我们将详细的完成上面的功能。


