spring 5 webclient使用指南

2021-09-11 12:20:15 字數 2777 閱讀 1798

之前寫了一篇resttemplate使用例項,由於spring 5全面引入reactive,同時也有了resttemplate的reactive版webclient,本文就來對應展示下webclient的基本使用。

@test

public void testwithcookie

()",resp.block());

}複製**

@test

public void testwithbasicauth

()",resp.block());

}複製**

@test

public void testwithheaderfilter

() {}", clientrequest.method(), clientrequest.url());

clientrequest.headers()

.foreach((name, values) -> values.foreach(value -> logger.info("{}={}", name, value)));

return next.exchange(clientrequest);

}).build();

monoresp = webclient.get()

.uri("")

.retrieve()

.bodytomono(string.class);

logger.info("result:{}",resp.block());

}複製**

@test

public void testurlplaceholder

()&other=","北京天氣","test") //使用佔位符

.retrieve()

.bodytomono(string.class);

logger.info("result:{}",resp.block());

}複製**

@test

public void testurlbiulder

()",resp.block());

}複製**

@test

public void testformparam

()",resp.block());

}複製**

static class book 

public void setname(string name)

public string gettitle

() public void settitle(string title)

}@test

public void testpostjson

()",resp.block());

}複製**

@test

public void testpostrawjson

()"))

.retrieve().bodytomono(string.class);

logger.info("result:{}",resp.block());

}複製**

@test

public void testuploadfile

()",resp.block());

}複製**

@test

public void testdownloadimage() throws ioexception

複製**

@test

public void testdownloadfile() throws ioexception

複製**

@test

public void testretrieve4xx

()&direction=",

"updated", "desc")

.retrieve();

monomono = responsespec

.onstatus(e -> e.is4xxclienterror(),resp -> ,msg:{}",resp.statuscode().value(),resp.statuscode().getreasonphrase());

return mono.error(new runtimeexception(resp.statuscode().value() + " : " + resp.statuscode().getreasonphrase()));

}).bodytomono(string.class)

.doonerror(webclientresponseexception.class, err -> ,msg:{}",err.getrawstatuscode(),err.getresponsebodyasstring());

throw new runtimeexception(err.getmessage());

}).onerrorreturn("fallback");

string result = mono.block();

logger.info("result:{}",result);

}複製**

webclient是新一代的async rest template,api也相對簡潔,而且是reactive的,非常值得使用。

spring學習筆記5

場景 想通過magicboss.getcar方法每次都得到乙個新的car例項。car是prototype,但magicboss是singleton。可以採用lookup方法注入。依賴於cglib。cglib可以在執行期動態操作位元組碼,為bean動態建立子類或實現類。public inte ce m...

Spring學習筆記 (5)

spring 1.需要注入的屬性寫到配置檔案中 如果屬性為基礎型別,需要有setter 方法,必須也寫在包的類 中,因為需要setter 方法 如果屬性為類,需要有無參構造方法,可不寫在包的類 中 2.spring config.xml的告知 在程式入口告知 對於測試入口 contextconfig...

Spring5原始碼分析之Spring

因為本人打算仿照spring寫個小型spring tinyspring,所以要閱讀spring原始碼,在閱讀原始碼過程中的發現就記錄於此,如果有什麼錯誤,歡迎指出,我會及時更正。dispatcherservlet繼承了httpservlet並把doget,dopost等一系列方法在內部都呼叫dopr...