溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringBoot中的Get與Post請求怎么利用Restful service實現(xiàn)

發(fā)布時間:2020-12-02 15:37:35 來源:億速云 閱讀:160 作者:Leah 欄目:編程語言

SpringBoot中的Get與Post請求怎么利用Restful service實現(xiàn)?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1. Get請求,url傳參,返回json。

先準備一個請求后,響應(yīng)的對象。

package com.example.demo;
public class Echo {
  private final long id;
  private final String content;
  public Echo(long id, String content) {
    this.id = id;
    this.content = content;
  }
  public long getId() {
    return this.id;
  }
  public String getContent() {
    return this.content;
  }
}

準備一個用來接收請求的EchoController(名字可以根據(jù)實際情況寫),為它增加@RestController注解,表示這是一個處理RESTful請求的響處理類。

增加@RequestMapping,為本Controller提供一個根url,當然可以不寫,寫這個是為了更好的將同一種處理的url歸在一類,本Controller其他的處理方法對應(yīng)的url中就不需要重復(fù)寫。

package com.example.demo;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ModelAttribute;
@RestController
@RequestMapping("/echo")
public class EchoController {
  private static final String echoTemplate1 = "received %s!";
  private static final String echoTemplate2 = "%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)
  public Echo getterPattern2(@RequestParam(value="content", required=false) String alias) {
    return new Echo(counter.incrementAndGet(), String.format(echoTemplate1, alias));
  }
}

getterPattern1的上面增加了@RequestMapping注解,將指定的url和處理的方法進行映射,對應(yīng)這個url的請求就由該方法來處理,method可以省略,省略后就是對應(yīng)所有的Http Metho,gtterPatten1方法的參數(shù)默認就和url中的content參數(shù)進行映射。

再看getterPattern2,跟上面的方法效果一致,他們的區(qū)別就在于參數(shù)定義用了@RequestParam注解將url參數(shù)和方法參數(shù)進行了映射說明,@RequesteParam中value的值就是url中實際的參數(shù),required說明該參數(shù)是否必須,如果是true,而實際上url中并沒有帶上該參數(shù),那么會報異常,為防止異??梢栽黾觗efaultValue指定參數(shù)的默認值即可。我們會發(fā)現(xiàn)這里的方法參數(shù)是alias,這里當然是可以和url的參數(shù)名不同,只要RequestParam注解映射了他們的關(guān)系就沒問題。

運行后,可以在瀏覽器中訪問對應(yīng)的url來看看結(jié)果,我這里是用curl來訪問。

curl http://localhost:8080/echo/getter/pattern1?content=hello
curl http://localhost:8080/echo/getter/pattern2?content=hello

 上面兩個url的訪問得到的結(jié)果除了id會自增外,其他是一致的:

{"id":6,"content":"received hello!"} 

 2. Get請求,傳遞url路徑參數(shù),返回json。

在EchoController中增加一個響應(yīng)方法。

  @RequestMapping(value="/getter/pattern3/{content}", method=RequestMethod.GET)
  public Echo getterPattern3(@PathVariable String content) {
    return new Echo(counter.incrementAndGet(), String.format(echoTemplate1, content));
  }

可以看到,在@RequestMapping的url定義中的末尾有“{content}”,表明這里是一個路徑參數(shù),在getterPattern3的參數(shù)content增加了@PathVariable注解,將方法參數(shù)與路徑參數(shù)進行了映射。

運行后,訪問url。

curl http://localhost:8080/echo/getter/pattern3/123456

結(jié)果:

{"id":8,"content":"received 123456!"}

3.Post請求,參數(shù)以Http body的途徑提交Json數(shù)據(jù)。

先定義一個提交的Json對應(yīng)的對象,這里把它定義為Message。

package com.example.demo;
public class Message {
  private String from;
  private String to;
  private String content;
  public Message() {}
  public String getFrom() {
    return this.from;
  }
  public String getTo() {
    return this.to;
  }
  public String getContent() {
    return this.content;
  }
  public void setFrom(String value) {
    this.from = value;
  }
  public void setTo(String value) {
    this.to = value;
  }
  public void setContent(String value) {
    this.content = value;
  }
}

在EchoController增加響應(yīng)的方法,并完成映射。

  @RequestMapping(value="/setter/message1", method=RequestMethod.POST)
  public Echo setterMessage1(@RequestBody Message message) {
    return new Echo(counter.incrementAndGet(), String.format(echoTemplate2, message.getFrom(), message.getTo(), message.getContent()));
  }

在setterMessage1方法的參數(shù)中用@RequestBody將請求的Http Body和參數(shù)messge進行了映射。

運行后,使用curl向服務(wù)端提交json數(shù)據(jù)。提交的請求頭部要帶上"Content-Type:application/json",表明請求體Json。

curl -i -H "Content-Type:application/json" -d "{\"from\":\"Tom\",\"to\":\"Sandy\",\"content\":\"hello buddy\"}" http://localhost:8080/echo/setter/message1

結(jié)果:

{"id":9,"content":"Tom speak to Sandy 'hello buddy'"}

4.Post請求,參數(shù)以Http body的途徑提交表單數(shù)據(jù)。

在EchoController增加響應(yīng)的方法,并完成映射。

  @RequestMapping(value="/setter/message2", method=RequestMethod.POST)
  public Echo setterMessage2(@ModelAttribute Message message) {
    return new Echo(counter.incrementAndGet(), String.format(echoTemplate2, message.getFrom(), message.getTo(), message.getContent()));
  }

 在setterMessage2方法的參數(shù)中用@ModelAttribute將請求的Http Body中的表單數(shù)據(jù)和參數(shù)messge進行了映射。

運行后,使用curl向服務(wù)端提交表單數(shù)據(jù)。提交的請求頭部要帶上"Content-Type:application/x-www-form-urlencoded",表明請求體是表單數(shù)據(jù),格式是"key1=value1&key2=value2&key3=value3"。

curl -i -H "Content-Type:application/x-www-form-urlencoded" -d "from=sandy&to=aissen&content=go to" http://localhost:8080/echo/setter/message2

 結(jié)果:

{"id":11,"content":"sandy speak to aissen 'go to'"}

關(guān)于SpringBoot中的Get與Post請求怎么利用Restful service實現(xiàn)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI