Micronaut 声明式 Http 客户端需要 @Body 或者你在 JSON 请求中得到一个密钥

Micronaut Declarative Http Client Requires @Body or you get a key in the JSON request

在发送 PR 以获取文档之前,我有点想获得一些验证。我有以下操作界面:

public interface StatusOperations {

    @Get
    HttpResponse<List<StatusResponse>> findAll();

    @Post
    Single<StatusResponse> save(StatusRequest statusRequest);
}

然后是声明式客户端界面:

@Client("/api/statuses")
public interface StatusClient extends StatusOperations {

    @Override
    @Get
    HttpResponse<List<StatusResponse>> findAll();

    @Override
    @Post
    Single<StatusResponse> save(StatusRequest statusRequest);
}

这里是 StatusRequest:

@Introspected
public class StatusRequest {

    private UUID id;

    @NotNull
    private String message;

    // getter/setter stuff below
}

当我用客户端打API:

StatusResponse response = client.save(new StatusRequest("Hello")).blockingGet();

我期待这个 body 到 post:

{"message": "Hello"}

但实际上 posting 是:

{"statusRequest": { "message": "Hello"}}

失败了。但是,如果我这样修改操作界面:

@Post
Single<StatusResponse> save(@Body StatusRequest statusRequest);

post body 是我所期望的,一切正常。 documentation 根本没有谈论这个,所以我不知道它是否只是丢失或者我是否发现了一个错误或什么。感谢您的任何反馈。

我 运行 遇到了同样的问题,我猜 @Body 只是在文档中丢失了。如果你能提出 PR 来澄清它就太好了。