我遇到了一个微妙的“最佳实践”困境。但首先,背景:
我在几个基于rest-springboot的微服务上工作,在这些微服务中,每个服务都将提取api模块。这背后的想法是:
每当你需要两个微服务相互通信时,只需添加api模块依赖项,瞧。您可以使用即插即用体验进行序列化/反序列化。
这对于保持这些服务之间通信的简单性和一致性非常有用。
但是,对于新创建的微服务,在其api中有一个具有单个字符串值的类,如:
public class Fog {
private String value;
private Fog() {
}
public Fog(final String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
}
问题是现在这个类将被序列化为
<{value=fa2a81f4-8412-41f9-8656-c94487f224ec}>
而不是像:
"fa2a81f4-8412-41f9-8656-c94487f224ec"
不,这个类不能仅仅被其父对象中的字符串替换,原因有几个。
对于这个问题,我知道有三种解决方案,但似乎没有一种是100%让我满意的:
像这样离开,创建序列化程序/反序列化程序并将其注册到服务中,该服务正在导入该模型->丢失即插即用体验。
创建一个mixin并在objectmapper中注册它-同样的故事,没有更多的即插即用体验。
添加@jsonvalue注解-除了它打破了我的规则“api模型类应该是vanilla java之外,我现在还强迫某人包含用于序列化/反序列化的fasterxml jackson库。
有没有第四个选项可以让我保持即插即用的体验,并使我的api模块从序列化/反序列化库中抽象出来?
暂无答案!
目前还没有任何答案,快来回答吧!