如何将JSON请求体转换为基于Avro模式的Java类?

如何将JSON请求体转换为基于Avro模式的Java类?,java,json,avro,openapi,Java,Json,Avro,Openapi,我有一个Kotlin Gradle Spring引导和Spring Webflux应用程序,它接受JSON作为其请求主体。我有一个openapi生成的Java类,JSON请求主体可以被转换到该类中 另一方面,我还有一个Avro模式,它与openapi相同,只是字段名已经清理。JSON请求主体具有名称以特殊字符开头的字段,例如$device\u version,+ip\u address,~ country。因此,在Avro模式中,我删除了它们,因为Avro只允许字段名以字母或下划线开头 从JSO

我有一个Kotlin Gradle Spring引导和Spring Webflux应用程序,它接受JSON作为其请求主体。我有一个
openapi
生成的Java类,JSON请求主体可以被转换到该类中


另一方面,我还有一个Avro模式,它与
openapi
相同,只是字段名已经清理。JSON请求主体具有名称以特殊字符开头的字段,例如
$device\u version
+ip\u address
~ country
。因此,在Avro模式中,我删除了它们,因为Avro只允许字段名以字母或下划线开头

从JSON请求主体转换为
openapi
生成的Java类没有问题,但是,由于字段名的原因,将其转换为Avro模式生成的Java类是一个问题

我的意思是,我可以手动设置字段,但是JSON对象非常大

是否有一个优雅而快速的解决方案将由于特殊字符而包含不同字段名的JSON请求体转换为Avro模式生成的类

使用的软件包
  • org.hidetake.swagger.generator
  • org.openapitools:openapi生成器cli
    (带swaggerCodeGen)
  • com.commercehub.gradle.plugin:gradle-avro-plugin

顺便说一句,Avro也可以通过HTTP传输。否则,你可以尝试使用Avro Jackson图书馆你是说这个图书馆吗?你知道图书馆是否能处理这些特殊字符吗?什么样的特殊字符?Avro记录与Java classese.g具有相同的限制<代码>$device\u版本,
+ip\u地址
~国家
。我最终将json负载转换为openapi生成的java类,然后手动将其转换为avro生成的类,而不使用任何映射库。我希望能有一个快速的解决方案。Java不允许在字段上使用加号或减号,所以我不确定您是如何得到这些的