gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:35:59 27 4
gpt4 key购买 nike

我在 micronaut 中发布到简单的 hello Controller 时遇到错误。客户端似乎以 application/json 形式发布,但 Controller 需要 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

@Test
void 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)
...

最佳答案

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

@Post(value = "/helloBody/{name}", consumes = MediaType.TEXT_PLAIN, produces = MediaType.TEXT_PLAIN)
Single<String> helloBody(@NotBlank String name, @NotBlank String body);

Micronaut 的想法是让网络操作在 Controller 和客户端之间共享。

让我们考虑一个名为 HelloOperations 的接口(interface)。这是您的 Web 界面,可以在客户端和服务器之间共享。

@Validated
public interface HelloOperations {

@Post(value = "/helloBody/{name}", consumes = MediaType.TEXT_PLAIN)
Single<String> helloBody(@NotBlank String name, @NotBlank @Body String text);
}

现在,您开始使用 Controller 实现在后端实现合约,例如

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

瞧。您已成功连接它们。

更多解释可以在 Micronaut 文档中找到:https://docs.micronaut.io/latest/guide/index.html#clientAnnotation

关于java - 如何在 micronaut 中使用生成的客户端进行发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57514255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com