Hackintosh终极指南:从硬件兼容到系统伪装的完整解决方案
2026/7/26 0:12:30
目录
9 前后端数据处理格式的注意事项
9.1 后端 JSON 序列化字段不一致问题
(1)修改变量名
(2)@JsonProperty指定 JSON 字段名
(3)隐藏敏感字段(如 password)
(4)空值字段不返回前端
9.2 前端响应格式适配问题
9.3 后端请求参数接收规范(DTO vs Map)
(1)数据类职责划分(强制)
(2)参数接收规范
(3)代码示例(规范 DTO 用法)
//假设接口文档中对应的变量名是meta // 错误写法 // private MetaVO metaVo; // 正确写法 private MetaVO meta;@JsonProperty("user_id") private Long userId;@JsonIgnore private String password;spring: jackson: default-property-inclusion: non_nullimport axios from 'axios' const request = axios.create({ baseURL: '/api' }) // 响应拦截器:自动提取Result<T>中的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 } }// 后端字段itemName/unitPrice → 前端name/price const mappedItems = items.map(item => ({ ...item, name: item.itemName, price: item.unitPrice, unitPrice: item.unitPrice, totalPrice: item.totalPrice }))对比维度 | 专用 DTO 类接收 | Map 集合接收 | 核心影响 |
字段过滤 | 自动过滤无关参数(如表单按钮) | 接收所有参数(含无关字段) | Map 需手动过滤,易遗漏;DTO 无需额外处理 |
类型安全 | 编译期校验(如 String→Integer 报错) | 运行期类型转换异常 | DTO 提前暴露错误,Map 线上才会发现问题 |
参数校验 | 支持 @NotBlank / @NotNull 等注解 | 需手动编写校验逻辑 | DTO 简化校验,Map 增加冗余代码 |
可读性 | 字段显性定义,易协作 | 字段隐性存储,需查文档 | DTO 降低团队沟通成本,Map 易导致理解偏差 |
适用场景 | 表单 / 接口参数接收(90% 场景) | 临时调试、动态参数(极少场景) | DTO 适配结构化参数,Map 仅用于非结构化场景 |
数据类类型 | 核心职责 | 禁用场景 |
Entity | 对应数据库表,仅用于数据层 | 直接接收前端参数、返回给前端 |
DTO | 接收前端参数,含参数校验,仅存必要字段 | 映射数据库、返回给前端(特殊场景除外) |
VO | 返回前端数据,隐藏敏感字段 | 接收前端参数、映射数据库 |
// 购物车添加参数DTO(仅含必要字段) @Data public class CartAddDTO { @NotNull(message = "商品ID不能为空") private Long productId; @Min(value = 1, message = "数量不能小于1") private Integer quantity; // 仅包含接口所需字段,自动过滤表单无关参数(如按钮、隐藏域) } // Controller接收参数(自动过滤无关字段+校验) @PostMapping("/cart/add") public Result<Void> addCart(@Valid @RequestBody CartAddDTO cartAddDTO) { cartService.addCart(cartAddDTO); return Result.success(); }