1. 程式人生 > >spring-boot構建RESTful Web服務

spring-boot構建RESTful Web服務

往後官方demo的筆記不貼程式碼了,只貼連結

官方文件

RESTful Web服務

該服務將處理GET請求/greeting,可選地使用name查詢字串中的引數。該GET請求應該返回200 OK在表示問候的身體與JSON響應。它應該看起來像這樣:

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

瀏覽器輸入localhost:8080/greeting,成功返回,如下:


學習要點

  1. @RestController

    • 在Spring構建RESTful Web服務的方法中,HTTP請求由控制器處理。這些元件很容易通過@RestController註釋來識別.
    • Spring 4的新@RestController註釋,它將類標記為控制器,其中每個方法都返回一個域物件而不是檢視。它是速記@Controller和@ResponseBody拼湊在一起的。
    • @RequestMapping註釋可以確保HTTP請求/greeting被對映到greeting()方法。
    • @RequestParam將查詢字串引數的值繫結name到方法的name引數中greeting()。如果name請求中不存在該引數,defaultValue則使用“World”。
  2. @SpringBootApplication註解(谷歌翻譯)

    • @SpringBootApplication 是一個便利註解,添加了以下所有內容:

      • @Configuration 標記該類作為應用程式上下文的bean定義的源。

      • @EnableAutoConfiguration 告訴Spring Boot開始根據類路徑設定,其他bean和各種屬性設定新增bean。

      • 通常你會新增@EnableWebMvc一個Spring MVC應用程式,但Spring Boot會在類路徑上看到spring-webmvc時自動新增它。這會將應用程式標記為Web應用程式並激活關鍵行為,例如設定a DispatcherServlet。

      • @ComponentScan告訴Spring在包中尋找其他元件,配置和服務hello,允許它找到控制器。

    • 該main()方法使用Spring Boot的SpringApplication.run()方法來啟動應用程式。您是否注意到沒有一行XML?也沒有web.xml檔案。此Web應用程式是100%純Java,您無需處理配置任何管道或基礎結構。


最後,GreetingController中還有一個類:java.util.concurrent.atomic.AtomicLong

放程式碼吧

package hello;

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;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}

new AtomicLong();new 了一個counter物件,初始值為0,而後在new greeting的時候作為greeting類的id傳入時,呼叫了incrementAndGet()方法,該方法會將原來的值+1後返回。
可參考:java se 7

END