真诚发问,求助一个关于 Java 的 domain 层的疑问

2022 年 9 月 2 日
 smith123

真诚发问,对于 java 如果多个接口想共用一个 domain 层,但是最后接口返回的字段又不一样,但这些字段都是这个 domain 的子集(排列组合),这种情况应该怎么办?

比如:

publica class A {

	private String name;
    private Long type;
    private Long age;
    private Long height;
    private Long weight;
    private String attr;
    ........

}

对于接口 1 ,我期望的返回应该是:

{
	"data": [
     {"name": "1", "type": "1"},
     {"name": "1", "type": "1"},
     {"name": "1", "type": "1"}
    ]
    
    
}

对于接口 2 ,我期望的返回应该是:

{
"data": [
     {"name": "1", "age": "1", "height":"1"},
     {"name": "2", "age": "2", "height":"2"},
     {"name": "3", "age": "3", "height":"3"},
    ]
    
}

对于接口 3 ,我期望的返回应该是:

{
"data": [
     {"weight": "1", "attr": "1", "age":"1"},
     {"weight": "2", "attr": "2", "age":"2"},
     {"weight": "3", "attr": "3", "age":"3"},
    ]
    
}

等等等,实际上可以说接口的返回是 A 这个类属性的随机排列组合,而我又不想给每个接口单独定义 VO 的形式,所以请问我该怎么办?

2229 次点击
所在节点    问与答
15 条回复
Veneris
2022 年 9 月 2 日
如果是真子集,加个 json 序列化注解,有个属性可以把为 null 的不字段不返回
smith123
2022 年 9 月 2 日
@Veneris 但如果说,某些接口就是需要这个字段不管他是不是 null,这种情况怎么办呢?
Veneris
2022 年 9 月 2 日
@smith123 手动序列化 json ?不过这样一来还不如自定义 vo 了🤣
optional
2022 年 9 月 2 日
domain 层入参和返回 entity ,service 层返回 dto ,mapper 转换不同的对象
xiangyuecn
2022 年 9 月 2 日
。。。Map 一把梭🐶
chihiro2014
2022 年 9 月 2 日
jpa projection 了解下
crysislinux
2022 年 9 月 2 日
domain 不应该处理这个。你这个应该在 application 处理
iseki
2022 年 9 月 2 日
没必要一个对象从头捅到尾,该转换转换就好了
cpstar
2022 年 9 月 2 日
不懂什么 domain ,但是我觉得 class A 有一个虚拟方法 toJSON ,或者还有一个接口的一个方法 toJSON(A a),然后三个接口实现类 X/Y/Z ,然后加工厂根据过来的接口 1 、2 、3 生成 X/Y/Z 进而完成 toJSON(a)。
itechify
2022 年 9 月 2 日
用 mapstruct 转不同 vo ,就定义多一个实体
qua
2022 年 9 月 2 日
Jackson @JsonView
kkeep
2022 年 9 月 3 日
Java 就是整得概念多,你每个接口出去的时候定一个实体?或者你就声明 keys
awalkingman
2022 年 9 月 3 日
@xiangyuecn 来人,把这个 map 一把梭的家伙拖出去枪毙 10 分钟
v2eb
2022 年 9 月 4 日
dto vo 这些多的好恶心🙊。
Amber2011
2022 年 9 月 4 日
不序列化 null 值

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

https://v2ex.xtra.eu.org/t/877349

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

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

© 2021 V2EX