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

是否有 Java 类库可以对的 Java Bean 进行一些额外的处理逻辑

  •  
  •   lihongjie0209 · 137 天前 · 2945 次点击
    这是一个创建于 137 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对于一些第三方的数据总是要进行一些处理然后才能进入业务逻辑

    Class PoJo {
    
    
    
    	@Trim
    	private String name;
    
    	@Default(value= new Date())
         private Date date;
    
    
    }
    

    对于 Trim 来说, 如果第三方传过来的 name = "hello " , 那么经过处理之后 name="hello" .

    30 条回复    2020-01-19 09:55:22 +08:00
    guyeu
        1
    guyeu   137 天前
    没有。感觉这种东西不但没办法解决问题,还会造成问题。。
    lihongjie0209
        2
    lihongjie0209   137 天前
    @guyeu #1 有什么问题?
    xbigfat
        3
    xbigfat   137 天前
    我觉得可以自己实现这个注解
    joichuai
        4
    joichuai   137 天前
    mark 下等大佬回复,自己平时遇到的顶多是下划线驼峰互相转,复杂业务都自己代码里转换了。
    xiaoyu03
        6
    xiaoyu03   137 天前
    Spring 的话用实现 AnnotationFormatterFactory 接口自定义注解可不可行?
    lihongjie0209
        7
    lihongjie0209   137 天前
    @sonyxperia #5 我希望是一个和框架无关的实现, 只要符合 Java Bean 的规范就好了, 你没办法保证用户的输入从哪里来, 如果这些输入是从一个 Json 文件中读取出来的, 那么 Spring MVC 那一套就没办法用了
    lihongjie0209
        8
    lihongjie0209   137 天前
    @xiaoyu03 #6 我希望是一个和框架无关的实现, 只要符合 Java Bean 的规范就好了, 你没办法保证用户的输入从哪里来, 如果这些输入是从一个 Json 文件中读取出来的, 那么 Spring MVC 那一套就没办法用了
    lihongjie0209
        9
    lihongjie0209   137 天前
    @xbigfat #3 想问一下有没有现成的方案
    Cbdy
        10
    Cbdy   137 天前 via Android
    可以考虑自定义 getter
    lihongjie0209
        11
    lihongjie0209   137 天前
    @Cbdy #10 如果作为一个 Data Entity, 有可能是你这边处理一遍之后再序列化然后发送给别的程序, 那么 getter 中的逻辑是没办法被序列化的
    Raymon111111
        12
    Raymon111111   137 天前
    拦截在方法上?
    guyeu
        13
    guyeu   137 天前
    @lihongjie0209 #2 根据约定,JavaBeans 一定是可以被序列化的,你展示的注解给序列化和反序列化带来了不确定和不一致,由此可能产生无数 bug。
    lihongjie0209
        14
    lihongjie0209   137 天前
    @guyeu #13
    我希望的是这样的
    ```
    pojo.setName(Strings.trim(pojo.getName()))
    ```
    所以并不会破坏 JavaBean 的规范
    chendy
        15
    chendy   137 天前
    默认你用的是 jackson…
    直接 trim 字符串 https://stackoverflow.com/questions/6852213/
    默认值考虑用 Option 实现一下?
    lihongjie0209
        16
    lihongjie0209   137 天前
    @chendy #15 和 jackson 没关系, 我有一个

    pojo = new pojo("hello ", null)

    我想找一个 library

    newPojo = library.process(pojo)

    assertEquals(newPojo.getName(), "hello")
    assertTrue(newPojo.getDate()!=null)
    junbaor
        17
    junbaor   137 天前 via iPhone
    如果要求是 get 方法返回的被处理,可以研究一下 lombok 的思路
    chendy
        18
    chendy   137 天前
    @lihongjie0209 emm…感觉可以自己反射一把梭了…
    lihongjie0209
        19
    lihongjie0209   137 天前
    @chendy #18 嗯, 没有合适的类库只能这样了
    Cbdy
        20
    Cbdy   137 天前
    @lihongjie0209 其实你的需求很简单,完全可以自己写一个
    lychs1998
        21
    lychs1998   137 天前
    自己定义一个 @Trim 注解,定义一个拦截器或切面,对请求参数的所有 field 进行检查,找到 @Trim 注解的就去检查格式是否符合,不符合的处理后继续。
    lihongjie0209
        22
    lihongjie0209   137 天前
    @Cbdy #20 我之前认为 BeanUtil 的 copy 很简单, 知道我遇到了 MapStruct 我才知道还能这么玩
    xxdd
        23
    xxdd   137 天前
    MapStruct 这个测过效率没 一直没测过
    lux182
        24
    lux182   137 天前
    bean 只用了 lombok。
    optional
        25
    optional   137 天前 via iPhone
    要想不依赖框架,只能用 annotation processor
    Octopvs
        26
    Octopvs   137 天前
    其实 BeanUtils 这些都是对 Bean 的 set 方法进行一个调用,那么可以在 set 方法里做一些手脚; A->A1->A,A1 的 set 方法做过手脚,那么就可以实现一个快速的转换。
    Person person = new Person(1L,"li",20);
    PersonU pu = new PersonU();
    BeanUtils.copyProperties(person,pu);
    BeanUtils.copyProperties(pu,person);
    System.out.println(person);
    在 PersonU 中的 set 进行一个年龄+1
    lihongjie0209
        27
    lihongjie0209   137 天前
    @xxdd #23 目测是最好的, 完全代码生成, 不涉及反射
    KentY
        28
    KentY   136 天前
    @xxdd MapStruct 是常见的 mapping frameworks(相比 jmapper, dozer, modelmapper, orika)里性能最高的.
    szq8014
        29
    szq8014   133 天前
    感觉可以看看 lombok enhance 一下
    liuzhaowei55
        30
    liuzhaowei55   131 天前
    这应该就是 set,get 存在的意义吧,不然就是为了 private 而 private
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2942 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 12:36 · PVG 20:36 · LAX 05:36 · JFK 08:36
    ♥ Do have faith in what you're doing.