如何配置micronaut序列化以与开放api生成的模型一起使用?

问题描述

问题描述 我有一个项目,正在使用micronaut构建RESTful api。响应正文中返回的模型是根据开放的api规范(使用gradle插件)生成的。

但是,由于某种原因,即使它应该是填充的对象,它也总是将任何模型对象作为空的json对象{}返回。

存储库链接 https://gitlab.com/connorbutch/open-api-micronaut-quarkus

输出示例

预期:

[
     {
           "id": 123
           "name": "Scruffy"
           "tag": "Chuck's pup"

     }
]

实际:[{}]

如何复制

  • 在本地克隆代码(git clone ....)
  • 导航到根目录(cd .......)
  • 运行gradle构建(渐进式构建)
  • 导航到“阅读理解服务器-impl”(CD阅读-理解服务器-impl)
  • 运行docker build(或者docker build。-t ....或仅运行./docker-build.sh)
  • 运行刚刚构建的docker映像(docker run -p 8080:8080 reading-comprehension-server-impl)
  • 向服务器发出获取请求(http:// localhost:8080 / pets?limit = 4)

我的想法 我很好奇的一些事情包括:

  • 这可能是(等级)范围问题吗?我应该使用api代替@Introspected注释的实现吗(只是看看它是否有效)?
  • 这可能是在另一个模块/ jar中生成的模型的问题吗?我应该将这一代移到同一个项目中(只是看看它是否有效)吗?
  • 在不同模块之间使用不同的micronaut版本可能会引起问题吗?
  • 是否可以通过某种方式注入(或以其他方式)获得对bean序列化程序的引用以进行进一步调试?

其他探索

  • 我修改了一个端点,以从同一模块返回对象模型(只是一个虚拟响应),并且以正确的格式返回了...。因此它可能是版本问题,也可能是构建问题(因为它在另一个模块中)
  • 我修改了包含的模块以使用相同的micronaut版本(目前为1.3.0,将来希望升级至2.x.x),但仍无法正确序列化
  • 我创建了一个试图在响应主体中序列化到该模块的类的副本,并且该副本有效(请参见NotARealPet.java)。现在的问题是,我可以将其配置为工作,还是应该(临时)更改要在该项目的构建目录中生成的api?

解决方法

我找到了答案。即使使用@Introspected编译类,graal vm(本机映像cli)也不会查看这些类。为了包括这些,我最终结束了一个类,指定对这些类进行自省@Introspected(classes = {Pet.class,Error.class})

如果有人感兴趣,我将发布带有示例的gitlab链接

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...