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

2020-01-13 15:41:10 +08:00
 lihongjie0209

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

Class PoJo {



	@Trim
	private String name;

	@Default(value= new Date())
     private Date date;


}

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

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

pojo = new pojo("hello ", null)

我想找一个 library

newPojo = library.process(pojo)

assertEquals(newPojo.getName(), "hello")
assertTrue(newPojo.getDate()!=null)
junbaor
2020-01-13 16:38:16 +08:00
如果要求是 get 方法返回的被处理,可以研究一下 lombok 的思路
chendy
2020-01-13 16:45:20 +08:00
@lihongjie0209 emm…感觉可以自己反射一把梭了…
lihongjie0209
2020-01-13 16:51:10 +08:00
@chendy #18 嗯, 没有合适的类库只能这样了
Cbdy
2020-01-13 16:58:01 +08:00
@lihongjie0209 其实你的需求很简单,完全可以自己写一个

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/637517

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX