V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ffw5b7
V2EX  ›  问与答

Java 有成熟的框架 获取嵌套多层对象的所有属性对象吗?

  •  
  •   ffw5b7 · 2020-09-05 12:46:17 +08:00 · 1642 次点击
    这是一个创建于 1568 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,比如 如何自动将一个对象的所有数学属性 大于 1000 的 转换为 xx.x 万。

    个人想法是
    1.递归拿所有属性对象,判断属性类型是否是 int 之类的,再判断是否大于 1w,截取小数。
    问题:
    如果有其他的数学属性不需要转换,这样也转了,不行,


    2. 加个判断,属性名规范 只有属性名 A 的才转换、



    延伸问题,有成熟的工具类吗? 这样性能怎么? 如果这样实现还有其他坑吗?

    在下,小白搜不到类似的,厚脸皮伸手了
    ffw5b7
        1
    ffw5b7  
    OP
       2020-09-05 12:52:17 +08:00
    不想从数据源写 sql 的时候主观直接处理了,
    或者说还有类似的需求不是转换,
    目的是如题:获取嵌套多层对象的所有属性对象
    clf
        2
    clf  
       2020-09-05 13:02:06 +08:00 via Android
    不明白这样的应用场景是什么。数值的优势就在于可进行算数运算,转换为 x.xx 万后应该就只剩下了显示作用。而显示什么样子,应该让前端处理。接口下发 x.xx 万的数据还会恶心到前端,前端做数据判断还需要去转换为数值?
    后端如果需要用到 x.xx 万这样的数据,那就自己写个 get 方法给需要的属性做转换就行了。
    ffw5b7
        3
    ffw5b7  
    OP
       2020-09-05 13:06:13 +08:00
    @lychs1998 给前端的数据 都是显示数据,前端只要渲染。 后端想在代码中自动处理了。
    clf
        4
    clf  
       2020-09-05 13:06:52 +08:00 via Android
    如果是获得嵌套多层属性对象这个单一需要的话,就是数据结构的事情了,把树形结构转化为数组或者单层树形结构。
    我之前写过一个方法是解析 json 的。嵌套 n 层的数据也可以通过 a.b.c[1].d 这样的 key 值获取,同时可以用 map 的 entryset 遍历。本质上就是数据结构的转换。
    clf
        5
    clf  
       2020-09-05 13:11:57 +08:00 via Android
    @ffw5b7 我个人很讨厌后端过度封装数据。比如时间,我更希望传递我时间戳。数值的显示转换对我来说只是对 text 做一个修改,value 还是数值,这样子我前端计算会方便很多。
    ffw5b7
        6
    ffw5b7  
    OP
       2020-09-05 13:22:21 +08:00
    @lychs1998 划分职责的原理还是不懂,前端不擅长处理复杂的业务判断? 或是是性能?客户端性能优先? 数据结构的问题,之前参考 fastJson,深拷贝,有点吃力,就想搜搜 copy 。哈哈哈
    clf
        7
    clf  
       2020-09-05 13:28:32 +08:00
    获得嵌套对象所有属性值参考我之前写过的这个类(写的比较烂): https://github.com/lychs1998/CatMock/blob/master/src/main/java/cn/myzju/mock/CatContainer.java

    但不要引入我写的这个依赖,我设计的时候是为后端 mock 框架填入值设计的,所以只考虑了解析,没考虑还原对象。而且同个包下的 CatMock 对象更是会引入 js 文件和 graalvm 。

    一个思路:把 json 转化为 jsonString,然后对需要转换的字段直接处理,最后把处理了的 jsonString 用 jackson 转换为对象。
    Cbdy
        8
    Cbdy  
       2020-09-05 16:11:50 +08:00 via Android
    自己手写一下也就十几二十行代码,没有必要找现成的库吧
    napsterwu
        9
    napsterwu  
       2020-09-05 16:36:06 +08:00 via iPhone
    手写一下基本都是 split(‘.’)迭代一下,再处理一下 edge case,没几行代码。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2856 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:35 · PVG 17:35 · LAX 01:35 · JFK 04:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.