[Spring-boot] No.1 做一個(gè)RESTful風(fēng)格的Web服務(wù)

一帐萎、目標(biāo) (Goal):

我們將要編寫一個(gè)接收HTTP GET 請(qǐng)求的后臺(tái)服務(wù),如下:
http://localhost:8080/greeting
以及返回一個(gè)JSON格式的“問候”:
{"id":1,"content":"Hello, World!"}
并且我們可以帶著一個(gè)參數(shù)(name)請(qǐng)求:
http://localhost:8080/greeting?name=Boy
然后我們將得到 "Hello, Boy!"的“問候”:
{"id":1,"content":"Hello, User!"}
以上就是我們本次所要做的全部?jī)?nèi)容弥锄,Let's start it!

二蟆沫、工具

  • IDE:我使用的是Intellij IDEA 2016.1.3籽暇;Eclipse也很不錯(cuò);
  • JDK 1.8 及以后
  • Maven 3.0+ (或者Gradle 2.3)饭庞;
  • 也可以從 https://start.spring.io/ 直接自定義一個(gè)spring-boot工程文件并下載使用戒悠;注意Dependencies處需要添加Web依賴,其他等以后用到可以另作添加但绕;

三救崔、Coding

先看一下我們需要返回的數(shù)據(jù)格式(JSON):

{
    "id": 1,
    "content": "Hello, World!"
}

那么為了與之對(duì)應(yīng)惶看,我們就先編寫一個(gè)Greeting類:
路徑:src/main/java/com/fd/restService/model/Greeting.java

package com.fd.restService.model;

public class Greeting {
    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

Spring可以通過 Jackson JSON 庫(kù)捏顺,自動(dòng)地將Greeting實(shí)例轉(zhuǎn)化為上述JSON形式六孵。

接下來創(chuàng)建一個(gè)控制器(Controller):

在Spring應(yīng)用中,HTTP請(qǐng)求將由控制器(Controller)接收幅骄,并進(jìn)行相應(yīng)處理劫窒。@RestController將GreetingController類標(biāo)注為一個(gè)控制器。

路徑:src/main/java/com/fd/restService/controller/GreetingController.java

package com.fd.restService.controller;

import com.fd.demo.model.Greeting;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.atomic.AtomicLong;

@RestController    //標(biāo)注為控制器
public class GreetingController {

    private static final String template = "Hello, %s!";     //返回格式
    private final AtomicLong counter = new AtomicLong();  //線程安全的Long

    @RequestMapping("/greeting")   //設(shè)置訪問路徑
    //設(shè)置一個(gè)請(qǐng)求參數(shù)name拆座,不傳則默認(rèn)傳“World”字符串
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {   
        //簡(jiǎn)單的返回一個(gè)Greeting實(shí)例主巍,而Spring會(huì)將其轉(zhuǎn)化為JSON格式
        return new Greeting(counter.incrementAndGet(), String.format(template, name));    
    }
}

注意幾個(gè)注解的用法:

  • @RestController:包含了@Controller和@ResponseBody;
  • @RequestMapping:value屬性表示訪問路徑設(shè)置挪凑,method屬性設(shè)置HTTP方法(如GET孕索、POST、PUT等)躏碳;
    如:@RequestMapping(value = "/greeting",method = RequestMethod.GET)
  • @RequestParam:常用有value搞旭、defaultValue、required屬性等

注:與傳統(tǒng)的MVC(通常返回一個(gè)HTML視圖)不同菇绵,RESTful風(fēng)格的Web服務(wù)注重?cái)?shù)據(jù)的交互肄渗,所以在返回的HTTP消息體中只有簡(jiǎn)單的數(shù)據(jù)本地(JSON格式簡(jiǎn)潔且易理解),這樣也便利了前后端的分離咬最。

運(yùn)行前的工作:

在通常的工作中翎嫡,我們都是通過打包成war包然后部署到遠(yuǎn)程服務(wù)器上的這么一個(gè)步驟。而spring有一套更簡(jiǎn)便運(yùn)行web服務(wù)的策略:

將所有需要運(yùn)行的類都各自打包成一個(gè)獨(dú)立的jar包永乌,并設(shè)置一個(gè)main()函數(shù)作為程序入口惑申。然后就可以通過spring的內(nèi)置Tomcat容器部署運(yùn)行你的服務(wù)。

以上都是策略翅雏,不需要我們實(shí)際依次去操作硝桩。
我們只要提供一個(gè)程序入口類:
路徑:src/main/java/com/fd/restService/ResTfulServiceApplication.java

package com.fd.restService;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ResTfulServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(ResTfulServiceApplication.class, args);
    }
}
  • @SpringBootApplication注解是以下幾個(gè)注解的總和:
    1.@Configuration:它告知 Spring 容器這個(gè)類是一個(gè)擁有 bean 定義和依賴項(xiàng)的配置類;
    2.@EnableAutoConfiguration:暗地里定義了一個(gè)基礎(chǔ)的包路徑枚荣,Spring Boot會(huì)在該包路徑來搜索類碗脊;
    3.@EnableWebMvc
    4.@ComponentScan:讓Spring去尋找包內(nèi)其他的組件、配置以及服務(wù)橄妆,在這里也就是找到我們的GreetingController 類衙伶;

最后,打jar包運(yùn)行或者依賴IDE運(yùn)行后:


Intellij IDEA 運(yùn)行方式
日志信息

運(yùn)行成功后在瀏覽器中輸入:
http://localhost:8080/greeting
得到返回結(jié)果:
{"id":1,"content":"Hello, World!"}

參考文檔

https://spring.io/guides/gs/rest-service/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末害碾,一起剝皮案震驚了整個(gè)濱河市矢劲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慌随,老刑警劉巖芬沉,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躺同,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡丸逸,警方通過查閱死者的電腦和手機(jī)蹋艺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黄刚,“玉大人捎谨,你說我怎么就攤上這事°疚” “怎么了涛救?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)业扒。 經(jīng)常有香客問我检吆,道長(zhǎng),這世上最難降的妖魔是什么程储? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任蹭沛,我火速辦了婚禮,結(jié)果婚禮上虱肄,老公的妹妹穿的比我還像新娘致板。我一直安慰自己,他們只是感情好咏窿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布斟或。 她就那樣靜靜地躺著,像睡著了一般集嵌。 火紅的嫁衣襯著肌膚如雪萝挤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天根欧,我揣著相機(jī)與錄音怜珍,去河邊找鬼。 笑死凤粗,一個(gè)胖子當(dāng)著我的面吹牛酥泛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嫌拣,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柔袁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了异逐?” 一聲冷哼從身側(cè)響起捶索,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灰瞻,沒想到半個(gè)月后腥例,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辅甥,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年燎竖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了璃弄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡底瓣,死狀恐怖谢揪,靈堂內(nèi)的尸體忽然破棺而出蕉陋,到底是詐尸還是另有隱情捐凭,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布凳鬓,位于F島的核電站茁肠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缩举。R本人自食惡果不足惜垦梆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仅孩。 院中可真熱鬧托猩,春花似錦、人聲如沸辽慕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溅蛉。三九已至公浪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間船侧,已是汗流浹背欠气。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留镜撩,地道東北人预柒。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像袁梗,于是被迫代替她去往敵國(guó)和親宜鸯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容