第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 Spring 反應(yīng)式處理函數(shù)中提取請(qǐng)求主體?

如何在 Spring 反應(yīng)式處理函數(shù)中提取請(qǐng)求主體?

心有法竹 2023-09-13 16:56:51
我正在使用 Spring Web Flux 實(shí)現(xiàn)一個(gè)處理程序函數(shù),并希望提取 POST-Body 的值x-www-form-urlencoded。public Mono<ServerResponse> handle(ServerRequest incomingHttpRequest) {    Mono<MultiValueMap<String, String>> formData = incomingHttpRequest.body(BodyExtractors.toFormData());    return formData            .doOnEach(signal -> {LOG.info("EACH: " + signal.getType());})            .doOnSubscribe(x -> {LOG.info("SUBSCRIBED");})            .doOnNext(next -> {LOG.info("NEXT: " + next);})            .doOnError(x -> {LOG.info("ERROR: " + x.getMessage());})            .doOnSuccess(x -> {LOG.info("SUCCESS: " + x);})            .flatMap(multiValueMap -> ServerResponse                .badRequest()                .body(BodyInserters.fromObject(                    "searchTerm: " + multiValueMap.getFirst("searchTerm")                ))            );}處理程序添加到路由器中,如下所示:return RouterFunctions.route(RequestPredicates.POST("/mysearch"), searchHandler::handle);                                                                              我希望得到一個(gè)包含 searchTerm 的 BAD_REQUEST。但我得到的是 200。對(duì)我來說,看起來生成的 Mono 已被訂閱,然后成功完成。但formData從未收到值,因此從未進(jìn)入flatMap(...)我做錯(cuò)了什么映射Mono<MultiValueMap<String, String>>到 a Mono<ServerResponse>?
查看完整描述

2 回答

?
不負(fù)相思意

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊

這里有兩件事在起作用:

  • 事實(shí)上,您只能訂閱(即讀?。┱?qǐng)求正文一次

  • 從請(qǐng)求中獲取表單數(shù)據(jù)需要讀取并解析它

在 Spring Boot 2.0.x-2.1.x 中,HiddenHttpMethodFilter默認(rèn)啟用。此過濾器對(duì)于在 HTML 表單中使用瀏覽器本身不支持的 HTTP 方法(例如“DELETE”)非常有用。如果傳入請(qǐng)求屬于該類型,則此過濾器需要解析表單數(shù)據(jù)。

可以說,這種用例越來越少見,并且從 Spring Boot 2.2 開始默認(rèn)被禁用。

現(xiàn)在,在您的示例中,讀取和解析傳入請(qǐng)求將不起作用,因?yàn)樗驯贿^濾器解析。禁用過濾器可以解決該問題。

但解決這個(gè)問題的更好方法是使用專用方法request.formData(),它將解析并緩存結(jié)果(如果多次調(diào)用,則返回已解析的數(shù)據(jù))。


查看完整回答
反對(duì) 回復(fù) 2023-09-13
?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

每當(dāng)您等待表單數(shù)據(jù)時(shí),您應(yīng)該使用

Mono<MultiValueMap<String, String>> formData = incomingHttpRequest.formData();

我已經(jīng)測試過,這種和平的代碼適用于這一更改。


查看完整回答
反對(duì) 回復(fù) 2023-09-13
  • 2 回答
  • 0 關(guān)注
  • 138 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)