这是我要转换为avro模式的java枚举:
public enum ApplicationCode {
APP_A("MY-APP-A"),
APP_B("MY-APP-B");
private final String code;
ApplicationCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}
由于枚举在avro中通常作为类型提供,因此我提出了以下建议:
{
"type" : "enum",
"name" : "ApplicationCode",
"namespace" : "com.example",
"symbols" : [ "APP_A", "APP_B" ]
}
在我的主要avro中引用如下:
"fields": [
{
"name": "masterApplicationCode",
"type": "ApplicationCode"
},
它是这样工作的,但不幸的是,我用这种方法丢失了应用程序代码(例如“my-app-a”)。我在寻找一些东西,它允许我同时包含代码和标签。像这样的
{
"type" : "enum",
"name" : "ApplicationCode",
"namespace" : "com.example",
"symbols" : [ "APP_A("MY-APP-A")", "APP_B("MY-APP-B")" ]
}
有没有可能有这种复杂的枚举,或者有什么解决方法来实现这一点?
2条答案
按热度按时间p8h8hvxi1#
我通过编写自定义序列化程序/反序列化程序解决了这个问题,该程序将具有复杂类型字段的对象Map到使用字符串而不是枚举发送的对象。
下面是自定义序列化程序的示例:
4zcjmb1e2#
我相信avro模式在内部将其转换为json字符串。所以,我认为问题更多的是序列化枚举。此处引用-https://www.baeldung.com/jackson-serialize-enums
我认为如果您使用这样的jsonformat注解,它应该返回代码-
否则,需要为枚举添加自定义序列化程序。