问题描述
问题描述 我有一个项目,正在使用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链接