【发布时间】:2019-08-15 18:14:38
【问题描述】:
在 micronaut 中发布到简单的 hello 控制器时出现错误。客户端似乎发布为应用程序/json,但控制器需要文本/纯文本。如何修复客户端以文本/纯文本形式发布?
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)
...
【问题讨论】:
-
更改
consumes = MediaType.APPLICATION_JSON有什么作用吗?我自己不是 100% 熟悉 Spring。 -
也许尝试将参数
produces = MediaType.APPLICATION_JSON添加到客户端@Post?不确定它是否可以编译,但值得一试 -
糟糕,
produces = MediaType.TEXT_PLAIN -
@Avi 是 Micronaut,而不是 Spring。但当然非常相似。
-
@saw303 :( 没看到,我的错。幸运的是,还有比我更熟悉 Micronaut 的其他人可以提供很好的答案 ;)