首页 > 解决方案 > Micronaut 声明式 Http 客户端需要 @Body 或者您在 JSON 请求中获得一个密钥

问题描述

在我为文档发送 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();

我期待这个机构发布:

{"message": "Hello"}

但实际发布的是:

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

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

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

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

标签: httpclientmicronaut

解决方案


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


推荐阅读