亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號