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

2022-09-02 22:12:17 +08:00
 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 的形式,所以请问我该怎么办?

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

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

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

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

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

© 2021 V2EX