V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ccppgo
V2EX  ›  Java

Java api 如何返回额外内容

  •  
  •   ccppgo · 2021-06-27 10:21:12 +08:00 · 2997 次点击
    这是一个创建于 1229 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如有个实体对象 有个属性 type, 对应在 mysql 里是 enum 存储几个英文的值, 我想在 API 里返回这个 type 的英文和额外返回对应前端需要显示的中文意思,java 怎么做这个事情呢, 如果类增加属性就和表不对应了, 本职是 PHP 程序员,PHP 要做这样的事情很简单, 好奇 java 如何能做到

    第 1 条附言  ·  2021-06-27 13:02:19 +08:00

    最终用Mybaits plus 的 TableFiles 注解 TypeHandler属性 + Jackson自定义序列化的方式解决, 完美实现了我想要的需求

    效果

    参考: https://cloud.tencent.com/developer/article/1651432 https://www.cnblogs.com/jeffen/p/6380982.html

    15 条回复    2021-06-27 13:36:54 +08:00
    luhe
        1
    luhe  
       2021-06-27 10:28:05 +08:00 via iPhone
    不对应也没关系吧
    uselessVisitor
        2
    uselessVisitor  
       2021-06-27 10:41:22 +08:00
    jpa 的话有个注解 @Transient
    mybatis-plus 有个注解 @TableField(exist = false)
    uselessVisitor
        3
    uselessVisitor  
       2021-06-27 10:42:39 +08:00
    如果你想更方便的生成对应的 type 的中文意思,可以使用自定义注解+aop 的形式对实体类进行动态查询添加
    fchange
        4
    fchange  
       2021-06-27 10:42:45 +08:00
    可以在 toString 里做手脚,也可以用 mabatis 的"枚举值映射"直接转换成枚举,输出依旧是 toStirng / toJsonString 做手脚
    ccppgo
        6
    ccppgo  
    OP
       2021-06-27 10:57:42 +08:00
    @luhe 开发组长的开发习惯喜欢同时返回状态的中英文, 不需要前端判断, 本来的话只返回英文让前端 switch 就好了。。
    ccppgo
        7
    ccppgo  
    OP
       2021-06-27 10:59:34 +08:00
    @beichenhpy
    @fchange
    谢谢, 我试一下
    wolfie
        8
    wolfie  
       2021-06-27 11:20:15 +08:00
    DO 、VO 分开,增加开发成本,减少维护难度和错误。
    xuanbg
        9
    xuanbg  
       2021-06-27 11:30:27 +08:00
    前端同样枚举就行,要传值做咩?你以为传了值前端就不需要枚举了吗,下拉列表或者单选 /多选不还得自己枚举么。。。
    allanzhuo
        10
    allanzhuo  
       2021-06-27 11:41:58 +08:00 via Android
    映射成枚举,返回值不要直接返回 do,resp 取下中文
    oneisall8955
        11
    oneisall8955  
       2021-06-27 11:54:04 +08:00 via Android
    转 vo 最简单,其次可以用 Jackson 或 Fastjson 自定义序列化 converter,可以统一转样式
    lym5241
        12
    lym5241  
       2021-06-27 12:34:25 +08:00
    返回的实体里再写个获取 type 中文意思的 get 方法 反的时候会有这个字段在 json 里
    Mikex88
        13
    Mikex88  
       2021-06-27 12:39:52 +08:00
    ccppgo
        14
    ccppgo  
    OP
       2021-06-27 13:03:52 +08:00
    @wolfie
    @oneisall8955
    想了下确实是 VO 最简单, 因为其实还有其他需求,转 VO 才能完全满足,谢谢了
    akira
        15
    akira  
       2021-06-27 13:36:54 +08:00
    中文部分的内容必然是业务无关的,只有展示的作用,
    个人更倾向与持久化存储在本地配置文件或者数据库里面,再根据需求获取填入返回的数据里面
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1083 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:09 · PVG 03:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.