为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 micronaut 中使用生成的客户端进行发布

如何在 micronaut 中使用生成的客户端进行发布

慕工程0101907 2023-06-08 14:37:37
在 micronaut 中发布到一个简单的 hello 控制器时出现错误。客户端似乎以 application/json 的形式发布,但控制器需要 text/plain。如何修复客户端以文本/纯文本形式发布?HelloController.java@Post(value = "/helloBody/{name}", consumes = MediaType.TEXT_PLAIN)public Single<String> helloBody(@NotBlank String name, @NotBlank @Body String text) {    return Single.just(name + "sent: " + text);}HelloClient.java@Post(value = "/helloBody/{name}")Single<String> helloBody(@NotBlank String name, @NotBlank String body);HelloControllerTest.java@Testvoid testPost() {    String body = client.helloBody("John", "message").blockingGet();    assertThat(body).isEqualTo("John sent: message");}错误io.micronaut.http.client.exceptions.HttpClientResponseException: Content Type [application/json] not allowed. Allowed types: [text/plain]    at io.micronaut.http.client.DefaultHttpClient$10.channelRead0(DefaultHttpClient.java:1799)    at io.micronaut.http.client.DefaultHttpClient$10.channelRead0(DefaultHttpClient.java:1739)    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)...
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

text/plain您可以通过告诉客户端按后端预期发送来更改此设置。


@Post(value = "/helloBody/{name}", consumes = MediaType.TEXT_PLAIN, produces = MediaType.TEXT_PLAIN)

Single<String> helloBody(@NotBlank String name, @NotBlank String body);

Micronaut 的想法是让Web 操作在控制器和客户端之间共享。


让我们考虑一个名为HelloOperations. 这是可以在客户端和服务器之间共享的 Web 界面。


@Validated

public interface HelloOperations {


  @Post(value = "/helloBody/{name}", consumes = MediaType.TEXT_PLAIN)

  Single<String> helloBody(@NotBlank String name, @NotBlank @Body String text);

}

现在您开始在后端使用控制器实现来实现合约,例如


@Controller

public class HelloController implements HelloOperations {


   @Override

   public Single<String> helloBody(String name, String text)  {


     // do something in here...

   }

}

之后你继续在客户端。


@Client

public interface HelloWorldClient extends HelloOperations {


   @Override

   Single<String> helloBody(String name, String text);

}

Et voilà。您已成功连接它们。


查看完整回答
反对 回复 2023-06-08
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信