下面的简单代码是带有reactive方法的quakus rest api的演示:
@Consumes
@Produces(MediaType.APPLICATION_JSON)
@Path("/api/v1/datasource")
public class DatasourceResource {
@Inject
DatabaseBoundary databaseBoundary;
@POST
@Path("/query")
public Uni<Response> query(DatasourceQuery param) {
DatasourceRecordDTO result = new DatasourceRecordDTO();
result.setId("888");
List<String> header = Arrays.asList("id", "name", "age");
DatasourceRecordItem item = new DatasourceRecordItem();
item.setKey("888");
item.setValueList(Arrays.asList("123", "wkx", "26"));
result.setHeader(header);
result.setRows(List.of(item));
result.setContent("ok");
return Uni.createFrom().item(Response.ok(result).build());
}
}
我试图用两种方式运行它:
使用第一种方法,我可以对内容“{xx: xx,xx:xx}”做出正确的响应:
然而,对于秒,我只能有一个空的响应“{}”:
为什么响应在这两种运行模式下表现不同?
我试图更换返回型统一
这是不同的,因为DatasourceRecordDTO
的序列化需要使用反射,GraalVM默认情况下不启用反射。
因此,在您的情况下,如果您使用@Register sterForReflection
注释DatasourceRecordDTO
,那么一切都应该按预期工作。
此外,如果您使用正在使用RESTEasy Reactive,则可以使用RestResponse
只是为了更详细地说明Uni