javascript
框架:SpringBoot构建Restful service完成Get和Post请求
SpringBoot構建Restful service完成Get和Post請求
?一個基本的RESTful?service最經常向外提供的請求Method就是Get和Post。
在Get中,常用的都會在請求上帶上參數,或者是路徑參數。響應Json。
請求帶參
路徑參數
?
在Post中,常用的會提交form data或者json data作為參數,響應Json。
?
1.??? Get請求,url傳參,返回json。
準備一個請求后,響應的對象。
package com.example.demo;
publicclass Echo{
??privatefinallongid;
??privatefinalStringcontent;
??publicEcho(longid,String content) {
????this.id= id;
????this.content= content;
??}
??publiclonggetId(){
????returnthis.id;
??}
??publicStringgetContent() {
????returnthis.content;
??}
}
準備一個用來接收請求的EchoController(名字可以根據實際情況寫),為它增加@RestController注解,表示這是一個處理RESTful請求的響處理類。
增加@RequestMapping,為本Controller提供一個根url,當然可以不寫,寫這個是為了更好的將同一種處理的url歸在一類,本Controller其他的處理方法對應的url中就不需要重復寫。
@RestController
@RequestMapping("/echo")
publicclassEchoController{
??privatestaticfinalStringechoTemplate1 = "received %s!";
??privatestaticfinalStringechoTemplate2 = "%s speak to %s \'%s\' ";
??private final AtomicLong counter = new AtomicLong();
??@RequestMapping(value="/getter/pattern1",method=RequestMethod.GET)
??public Echo getterPattern1(String content) {
????return new Echo(counter.incrementAndGet(),String.format(echoTemplate1, content));
??}
??@RequestMapping(value="/getter/pattern2",method=RequestMethod.GET)
??publicEchogetterPattern2(@RequestParam(value="content", required=false) String alias) {
????return new Echo(counter.incrementAndGet(),String.format(echoTemplate1, alias));
??}
}
getterPattern1的上面增加了@RequestMapping注解,將指定的url和處理的方法進行映射,對應這個url的請求就由該方法來處理,method可以省略,省略后就是對應所有的Http Method,gtterPatten1方法的參數默認就和url中的content參數進行映射。
看getterPattern2,跟上面的方法效果一致,他們的區別就在于參數定義用了@RequestParam注解將url參數和方法參數進行了映射說明,@RequesteParam中value的值就是url中實際的參數,required說明該參數是否必須,如果是true,而實際上url中并沒有帶上該參數,那么會報異常,為防止異??梢栽黾觗efaultValue指定參數的默認值即可。我們會發現這里的方法參數是alias,這里當然是可以和url的參數名不同,只要RequestParam注解映射了他們的關系就沒問題。
運行后,可以在瀏覽器中訪問對應的url來看看結果,我這里是用curl來訪問。
curl http://localhost:8080/echo/getter/pattern1?content=hello
curl http://localhost:8080/echo/getter/pattern2?content=hello
?上面兩個url的訪問得到的結果除了id會自增外,其他是一致的:
{"id":6,"content":"receivedhello!"}
?2. Get請求,傳遞url路徑參數,返回json。
在EchoController中增加一個響應方法。
@RequestMapping(value="/getter/pattern3/{content}",method=RequestMethod.GET)
publicEchogetterPattern3(@PathVariableString content) {
??return new Echo(counter.incrementAndGet(),String.format(echoTemplate1, content));
}可以看到,在@RequestMapping的url定義中的末尾有“{content}”,表明這里是一個路徑參數,在getterPattern3的參數content增加了@PathVariable注解,將方法參數與路徑參數進行了映射。
運行后,訪問url。
curl http://localhost:8080/echo/getter/pattern3/123456
結果:
{"id":8,"content":"received123456!"}
3.Post請求,參數以Http body的途徑提交Json數據。?@RequestBody
先定義一個提交的Json對應的對象,這里把它定義為Message。
packagecom.example.demo;
publicclassMessage{
??privateStringfrom;
??privateStringto;
??privateStringcontent;
??publicMessage(){}
??publicStringgetFrom() {
????returnthis.from;
??}
??publicStringgetTo() {
????returnthis.to;
??}
??publicStringgetContent() {
????returnthis.content;
??}
??publicvoidsetFrom(Stringvalue) {
????this.from =value;
??}
??publicvoidsetTo(Stringvalue) {
????this.to = value;
??}
??publicvoidsetContent(Stringvalue) {
????this.content =value;
??}
}
在EchoController增加響應的方法,并完成映射。
@RequestMapping(value="/setter/message1",method=RequestMethod.POST)
publicEchosetterMessage1(@RequestBody?Message message) {
??return new Echo(counter.incrementAndGet(),String.format(echoTemplate2, message.getFrom(), message.getTo(),message.getContent()));
}
在setterMessage1方法的參數中用@RequestBody將請求的Http Body和參數messge進行了映射。
運行后,使用curl向服務端提交json數據。提交的請求頭部要帶上"Content-Type:application/json",表明請求體Json。
curl -i -H "Content-Type:application/json"
-d"{\"from\":\"Tom\",\"to\":\"Sandy\",\"content\":\"hellobuddy\"}" http://localhost:8080/echo/setter/message1
結果:
{"id":9,"content":"Tom speak toSandy 'hello buddy'"}
4.Post請求,參數以Http body的途徑提交表單數據(根據屬性)。@ModelAttribute
在EchoController增加響應的方法,并完成映射。
@RequestMapping(value="/setter/message2",method=RequestMethod.POST)
public Echo setterMessage2(@ModelAttribute?Message message) {
? return newEcho(counter.incrementAndGet(), String.format(echoTemplate2, message.getFrom(),message.getTo(), message.getContent()));
}?
在setterMessage2方法的參數中用@ModelAttribute將請求的Http Body中的表單數據和參數messge進行了映射。
運行后,使用curl向服務端提交表單數據。提交的請求頭部要帶上"Content-Type:application/x-www-form-urlencoded",表明請求體是表單數據,格式是"key1=value1&key2=value2&key3=value
curl -i -H"Content-Type:application/x-www-form-urlencoded"
-d "from=sandy&to=aissen&content=go to "?http://localhost:8080/echo/setter/message2
?結果:
{"id":11,"content":"sandyspeak to aissen 'go to'"}
總結
以上是生活随笔為你收集整理的框架:SpringBoot构建Restful service完成Get和Post请求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 框架:HTTP请求的表单提交的几种方式
- 下一篇: 框架:Spring之Aware相关接口