Java开发中VO的使用

在Java开发中,存在各种"O",如:

  1. Entity/PO:数据库映射,持久层专用;
  2. DTO:层间传输数据,按需封装字段;
  3. VO:前端展示专用,屏蔽敏感信息、格式化数据;
  4. BO:业务逻辑载体,Service 层专用;
  5. POJO:所有简单 Java Bean 的统称,是基础。

这里重点说下VO的使用。

VO(View Object,视图对象)

  • 核心定义 :专门给前端展示的对象,是前端页面能直接使用的数据格式(屏蔽后端内部结构)。
  • 核心特征
    • 字段与前端页面展示的内容完全匹配(如格式化时间、拼接字段);
    • 不含敏感字段(如密码、用户手机号脱敏);
    • 可能包含前端需要的计算字段(如订单状态描述、金额单位)。
  • 使用场景:Controller 层返回给前端的最终数据对象。

那么VO 的边界在哪?

必须用 VO 的情况

  • 字段来自 多张表

  • 字段是 计算值 / 聚合值

  • 返回结构 ≠ 表结构

  • 一个字段对应多个源

不需要 VO 的情况

  • 只是 字段重命名

  • 只是 JSON key 不一致

  • 表结构与返回结构一致

清楚这个边界,能有效防止各种O的滥用。

如果只有个别字段跟前端要求不一样,为了给前端提供所需的JSON key,可以在实体类对应属性上添加注解:@JsonProperty。

比如前端需要返回desc(描述的缩写),但在mysql中desc,是关键字,把字段声明为desc程序运行会报错,除了该属性,其他字段属性跟前端要求的JSON大致一样,这种情况就不适用VO,我们只需在实体类上这样处理:

java 复制代码
@JsonProperty("desc")
private  String description;
相关推荐
鲨鱼辣钊2 小时前
【FastAPI筑基-Day19】APScheduler定时任务全实战|自动执行、动态启停、后台常驻
java·spring·fastapi
不正经学生4 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技4 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
恋恋西风6 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
学长毕业设计6 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
Brilliantwxx6 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
东小西6 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西7 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
许彰午7 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_962065257 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql