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

网站会员系统功能如何创建个人网站免费

网站会员系统功能,如何创建个人网站免费,天津市工程建设公众信息网官网,球迷类的网站如何做🚀 前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” 🌟 嘿,技术冒险家们!👋 今天我们要聊一个开发中常见的“坑”:前端传来的 JSON 参数字段名和后端对象字段名不一致,会发生…

🚀 前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” 🌟

嘿,技术冒险家们!👋 今天我们要聊一个开发中常见的“坑”:前端传来的 JSON 参数字段名和后端对象字段名不一致,会发生什么?是默默失败,还是直接炸裂?💥 我将以 Spring 的 PageWithSearch 为例,带你揭开 Jackson 的神秘面纱,还有流程图助阵,快跟我一起探索吧!💪


🎯 第一幕:一场“命名失误”的意外

问题起源

我在开发一个分页查询接口,前端传了个 JSON:

{"searchField": "name","searchValue": "John","pageNum": 0,"pageSize": 10
}

后端用 PageWithSearch 接收:

@PostMapping("/listInviteCodeByPageWithSearch")
public BaseResult listInviteCodeByPageWithSearch(@Valid @RequestBody PageWithSearch pageWithSearch) {Page<InviteCode> inviteCodePage = inviteCodeService.findPaginatedInviteCodeByAdminIdAndSearch(7, pageWithSearch);return BaseResult.success(inviteCodePage);
}

结果,服务层抛了个 NullPointerException,接口返回:

{"code": 500,"msg": "分页查询失败:null","data": null
}

啥?明明传了 pageNumpageSize,怎么炸了?🤔


🔍 第二幕:深入代码,寻找线索

关键代码

服务层:

public Page<InviteCode> findPaginatedInviteCodeByAdminIdAndSearch(Integer adminId, PageWithSearch pageWithSearch) {PageRequest pageRequest = PageRequest.of(pageWithSearch.getPage(), pageWithSearch.getPageSize());// ... 其他逻辑 ...
}

PageWithSearchBasePage

public class PageWithSearch extends BasePage {private String field;private String value;public Integer getPageSize() {return this.size;}
}public class BasePage {Integer page;Integer size;public Integer getPage() {return page;}public Integer getSize() {return size;}
}

初步分析

  • 前端字段pageNumpageSize
  • 后端字段pagesize
  • 问题:字段名不一致,pageWithSearch.getPage()getPageSize() 返回 null,导致 PageRequest.of 自动拆箱时抛出 NullPointerException

🐞 第三幕:Jackson 的“严格规则”

真相揭晓

Spring 默认用 Jackson 处理 JSON 到对象的映射,它的规则很简单:

  • 字段名必须一致:JSON 字段名与 Java 对象字段名大小写敏感匹配。
  • 不一致的结果:未匹配的字段被忽略,对象中对应字段保持默认值(null)。
测试验证

输入:

{"pageNum": 0,"pageSize": 10
}
  • pageWithSearch.getPage()null(无 page 字段)。
  • pageWithSearch.getPageSize()null(无 size 字段)。
  • PageRequest.of(null, null) → 自动拆箱 → NullPointerException
Mermaid 流程图:映射失败过程
前端: pageNum=0, pageSize=10
Jackson 映射到 PageWithSearch
page 未匹配, size 未匹配
getPage()=null, getPageSize()=null
PageRequest.of(null, null)
自动拆箱抛 NullPointerException
返回 500: '分页查询失败:null'

🔧 第四幕:解决“命名冲突”

为什么会这样?

  • Jackson 的默认行为:严格匹配,不做自动转换。
  • 后端代码:未处理字段名不一致,导致 null 值引发下游问题。

解决方案

方案 1:用 @JsonProperty 指定映射

修改 BasePagePageWithSearch

public class BasePage {@JsonProperty("pageNum")Integer page;@JsonProperty("pageSize")Integer size;// ... 其他代码 ...
}public class PageWithSearch extends BasePage {@JsonProperty("searchField")private String field;@JsonProperty("searchValue")private String value;// ... 其他代码 ...
}
  • 效果
    • 前端用 pageNumpageSizesearchField,后端正确映射。
    • 输入:
      {"searchField": "name","pageNum": 0,"pageSize": 10
      }
      
      • pageWithSearch.getPage()0
      • pageWithSearch.getPageSize()10
方案 2:全局命名策略

application.yml 中配置:

spring:jackson:property-naming-strategy: SNAKE_CASE
  • 效果
    • 前端用 page_numpage_size,自动映射到 pagesize
    • 输入:
      {"field": "name","page_num": 0,"page_size": 10
      }
      
方案 3:服务层防御

即使字段名不一致,也避免异常:

public Page<InviteCode> findPaginatedInviteCodeByAdminIdAndSearch(Integer adminId, PageWithSearch pageWithSearch) {Pageable pageable = pageWithSearch.toPageableWithDefault(0, 10); // 默认值保护String field = pageWithSearch.getField();String value = pageWithSearch.getValue();if (!StringUtils.isEmpty(field) && !StringUtils.isEmpty(value)) {return inviteCodeRepository.findPaginatedInviteCodeByAdminIdAndFieldAndValue(adminId, field, value, pageable);} else {return inviteCodeRepository.findByAdminId(adminId, pageable);}
}
  • 效果
    • pagesizenull 时,用默认值 0 和 10。
Mermaid 流程图:修复过程
前端: pageNum=0, pageSize=10
方案 1: @JsonProperty
page=0, size=10
PageRequest.of(0, 10)
正常返回数据
方案 3: toPageableWithDefault
page=0, size=10

🌈 第五幕:经验与启发

学到了啥?💡

  1. Jackson 的严格匹配
    • 字段名不一致,后端字段变 null,小心下游逻辑!
  2. 命名约定很重要
    • 前后端要统一字段名,或者用工具桥接差异。
  3. 防御性编程
    • null 是隐患,提前处理是王道。

小建议 🌟

  • 文档化
    • 用 Swagger 或 API 文档明确字段名,减少误解。
  • 日志排查
    log.info("Received: page={}, size={}", pageWithSearch.getPage(), pageWithSearch.getPageSize());
    

🎬 尾声

500 错误的迷雾到揭开字段名不一致的真相,这场 debug 让我对 JSON 映射有了新认识。希望这篇博客能帮你在前后端对接时少踩坑!有问题欢迎留言,咱们一起聊技术!✌️

在这里插入图片描述


文章转载自:

http://NLELggsz.rwwdp.cn
http://CdN7pAuM.rwwdp.cn
http://vudbz2MK.rwwdp.cn
http://IwtYl6oN.rwwdp.cn
http://OaUok93J.rwwdp.cn
http://NE3kGkRz.rwwdp.cn
http://CwLQWUyJ.rwwdp.cn
http://VJH9x2Xo.rwwdp.cn
http://6eI8JPT3.rwwdp.cn
http://x4l3tHkJ.rwwdp.cn
http://dqmjVe6G.rwwdp.cn
http://t4hDUMry.rwwdp.cn
http://jtDwHLRS.rwwdp.cn
http://WtH26HmQ.rwwdp.cn
http://I7dcxXRh.rwwdp.cn
http://ABQXUOzb.rwwdp.cn
http://gqVbEfu8.rwwdp.cn
http://WVW4ElC4.rwwdp.cn
http://2cTc09Qf.rwwdp.cn
http://qA7Kici4.rwwdp.cn
http://ih0jeo6W.rwwdp.cn
http://mCTk91JZ.rwwdp.cn
http://2cMbQ0yC.rwwdp.cn
http://gRaHbyeq.rwwdp.cn
http://fI4MFduv.rwwdp.cn
http://Ie2ZyNDE.rwwdp.cn
http://4PMp1DPC.rwwdp.cn
http://zh8UoQCR.rwwdp.cn
http://E9dgP4RE.rwwdp.cn
http://kJAot22o.rwwdp.cn
http://www.dtcms.com/wzjs/655321.html

相关文章:

  • 官网的网站建设桐庐建设局网站
  • 南昌网站推广¥做下拉去118cr网站系统建设的主要意义
  • 怎么在网站首页做飘窗中企动力总部在哪里
  • 网站ui设计报价单家装公司名称取名参考
  • 百度做营销网站多少钱网站建设要什么
  • 网站注册域名响应式网站几个断点
  • 山西制作网站公司排名做网站平台成本
  • 零食网站制作的建设大纲自己在线制作logo免费版
  • 公司logo设计在线制作大城网站优化
  • wordpress仿站服务学python学费大概多少
  • 南宁大型网站开发千锋教育地址
  • 世界著名产品设计作品深圳做网站乐云seo598
  • seo网站建设时文章频率企业建站公司怎么创业
  • 重庆做网站建设哪里好腾讯企业邮箱网址
  • 建设英文网站的必要性网站建设行业swot分析
  • 厦门网站设计公司哪家好福建电商小程序厦门开发公司国外优秀网站
  • 公司的做网站建设网站是什么关系
  • 公司管理软件有哪些网站页面优化技巧
  • 可以做外链的音乐网站搭建一个网站需要多少钱
  • 单位网站建设流程asp网站开发软件
  • 做国内第一游戏数据门户网站快速优化工具
  • 徐州鼓楼区建设网站高端网站建设必须要满足哪些要求
  • 网站导航做外链我的网站突然找不到网页了
  • 购物网站名字wordpress 被镜像
  • 国外工会网站建设叶涛网站推广优化
  • 加盟网站需要怎么做工具类网站开发
  • 专业视频网站开发公司seo快速收录快速排名
  • 缪斯设计网站网站开发项目建设经验
  • 做国外有那些网站比较好的怎样设计手机网站建设
  • 百度统计网站速度诊断工具wordpress自定义栏目是什么