网站建设为什么要推广福田欧曼服务站
2026/4/18 8:48:01 网站建设 项目流程
网站建设为什么要推广,福田欧曼服务站,牡丹江生活信息网,seo发帖工具目录 9 前后端数据处理格式的注意事项 9.1 后端 JSON 序列化字段不一致问题 (1)修改变量名 (2)JsonProperty指定 JSON 字段名 (3)隐藏敏感字段#xff08;如 password#xff09; (4)空值字段不返回前端 9.2 前端响应格式适配问题 9.3 后端请求参数接收规范#xff0…目录9 前后端数据处理格式的注意事项9.1 后端 JSON 序列化字段不一致问题(1)修改变量名(2)JsonProperty指定 JSON 字段名(3)隐藏敏感字段如 password(4)空值字段不返回前端9.2 前端响应格式适配问题9.3 后端请求参数接收规范DTO vs Map(1)数据类职责划分强制(2)参数接收规范(3)代码示例规范 DTO 用法9 前后端数据处理格式的注意事项9.1 后端 JSON 序列化字段不一致问题问题表现后端 VO 类变量名与接口文档约定的 JSON 字段名不匹配如接口定义meta后端写metaVo导致 Jackson 序列化后 JSON 字段名错误前端无法解析数据。底层原理SpringMVC 通过 Jackson 将 Java 对象序列化为 JSON核心规则如下Jackson 序列化时不直接读取 Java 变量名而是通过解析类的getter方法名来生成 JSON 字段名推导规则固定第一步去掉getter方法名的get前缀如getMeta()去掉get→MetagetMetaVo()去掉get→MetaVo第二步将剩余部分的首字母小写得到最终 JSON 字段名Meta→metaMetaVo→metaVo。IDEA 手动生成 getter、DataLombok自动生成 getter都是get 变量名首字母大写 变量剩余部分JSON 字段名大小写敏感需与前端完全一致。解决方案及拓展(1)修改变量名解决方案变量名严格对齐接口文档 JSON 字段名代码示例//假设接口文档中对应的变量名是meta // 错误写法 // private MetaVO metaVo; // 正确写法 private MetaVO meta;原理说明保证getter生成的字段名与接口一致(2)JsonProperty指定 JSON 字段名解决方案使用JsonProperty指定 JSON 字段名代码示例JsonProperty(user_id) private Long userId;原理说明覆盖 Jackson 默认规则强制定义字段名(3)隐藏敏感字段如 password解决方案使用JsonIgnore注解代码示例JsonIgnore private String password;原理说明序列化时跳过该字段JSON 中不生成对应键值对(4)空值字段不返回前端解决方案全局配置application.yml或JsonInclude注解代码示例全局配置spring: jackson: default-property-inclusion: non_null原理说明控制空值null / 空字符串 / 空集合是否序列化9.2 前端响应格式适配问题问题表现后端成功传参但是前端就是拿不到值前处理的字段名和后端处理的字段名不一致原因前端可能封装统一 axios 工具类拦截响应自动解析data代码示例响应拦截器会拦截所有的响应处理数据后再统一返回此时我前端调后端接口拿到的数据就是我响应拦截器处理后的数据不是后端返回的原始数据。import axios from axios const request axios.create({ baseURL: /api }) // 响应拦截器自动提取ResultT中的data request.interceptors.response.use( res res.data, // 直接返回data字段业务层无需再res.data error { console.error(请求失败, error) return Promise.reject(error) } )// 修正后的购物车数量更新方法 const updateCartCount async () { try { // 拦截器已解析data直接获取业务数据 const cartItems await request.get(/cart/items) cartItemCount.value Array.isArray(cartItems) ? cartItems.reduce((total, item) total item.quantity, 0) : 0 } catch (error) { cartItemCount.value 0 } }解决方案前后端字段名不一致解决方案前端手动映射字段名临时方案优先后端用JsonProperty对齐长期方案代码示例前端映射解构后端数据并重命名字段适配前端变量命名习惯// 后端字段itemName/unitPrice → 前端name/price const mappedItems items.map(item ({ ...item, name: item.itemName, price: item.unitPrice, unitPrice: item.unitPrice, totalPrice: item.totalPrice }))9.3 后端请求参数接收规范DTO vs Map问题表现使用Map接收表单参数时会包含按钮、隐藏域等无关字段需手动过滤未按规范使用 DTO 接收参数导致参数校验、类型安全无法保障混淆 DTO接收参数、VO返回数据、Entity数据库映射的职责数据类使用混乱。底层原理SpringMVC 参数绑定规则DTO 按字段名匹配赋值自动过滤无关参数Map存储全量键值对DTO 为强类型编译期校验Map为弱类型运行期报错不同数据类有明确职责边界混用会导致数据泄露、校验缺失。DTO 与 Map 详细对比对比维度专用 DTO 类接收Map 集合接收核心影响字段过滤自动过滤无关参数如表单按钮接收所有参数含无关字段Map 需手动过滤易遗漏DTO 无需额外处理类型安全编译期校验如 String→Integer 报错运行期类型转换异常DTO 提前暴露错误Map 线上才会发现问题参数校验支持NotBlank/NotNull等注解需手动编写校验逻辑DTO 简化校验Map 增加冗余代码可读性字段显性定义易协作字段隐性存储需查文档DTO 降低团队沟通成本Map 易导致理解偏差适用场景表单 / 接口参数接收90% 场景临时调试、动态参数极少场景DTO 适配结构化参数Map 仅用于非结构化场景规范要求(1)数据类职责划分强制数据类类型核心职责禁用场景Entity对应数据库表仅用于数据层直接接收前端参数、返回给前端DTO接收前端参数含参数校验仅存必要字段映射数据库、返回给前端特殊场景除外VO返回前端数据隐藏敏感字段接收前端参数、映射数据库(2)参数接收规范所有表单 / 接口参数强制使用 DTO 接收如UserLoginDTO、CartAddDTO仅包含接口所需字段禁止业务接口用Map接收 / 返回参数临时调试除外DTO 需添加参数校验注解如NotBlank校验非空、Pattern校验格式替代手动校验。(3)代码示例规范 DTO 用法// 购物车添加参数DTO仅含必要字段 Data public class CartAddDTO { NotNull(message 商品ID不能为空) private Long productId; Min(value 1, message 数量不能小于1) private Integer quantity; // 仅包含接口所需字段自动过滤表单无关参数如按钮、隐藏域 } // Controller接收参数自动过滤无关字段校验 PostMapping(/cart/add) public ResultVoid addCart(Valid RequestBody CartAddDTO cartAddDTO) { cartService.addCart(cartAddDTO); return Result.success(); }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询