问题描述
我有一个项目,正在使用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构建(gradle clean build)
  • 导航到阅读理解服务器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的问题吗?
  • 是否可以注入(inject)(或以其他方式)获取对bean序列化程序的引用以进行进一步调试?

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

    我找到了答案。即使使用@Introspected编译类,graal vm(本机镜像cli)也不会查看这些类。为了包括这些,我最终结束了一个类,指定对这些类进行自省(introspection)@Introspected(classes = {Pet.class,Error.class})
    如果有人感兴趣,我将发布带有示例的gitlab链接

    08-06 13:06