代码之家  ›  专栏  ›  技术社区  ›  Gregg

Micronaut声明性Http客户端需要@Body或在JSON请求中获得一个密钥

  •  0
  • Gregg  · 技术社区  · 5 年前

    我有点想在我发公关文件之前得到一些验证。我有以下操作界面:

    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);
    

    邮政机构是我所期望的,一切正常。这个 documentation 根本就不说这个,所以我不知道它是不是丢失了,或者我发现了一个bug之类的。谢谢你的反馈。

    0 回复  |  直到 5 年前
        1
  •  1
  •   saw303    5 年前

    我遇到了同样的问题,我猜@Body只是在文档中丢失了。如果你能提出一个公关来澄清这件事就太好了。