Spring Boot與RESTful API

在上一篇Spring Boot開發WEB頁面文章中,咱們介紹瞭如何搭建一個有頁面的web項目,這一篇咱們則着重講一下Spring Boot對RESTful的支持。java

   經常使用註解介紹

     首先須要介紹幾個經常使用的註解:web

  • @Controller 用於標註控制層組件
  • @RestController 此註解等同於@Controller+@ResponseBody,返回json數據
  • @RequestMapping 映射URL
  • @PathVariable 是用來對指定請求的URL路徑裏面的變量
  • @ModelAttribute 一、綁定請求參數到指定對象;二、暴露表單引用對象爲模型數據;三、暴露@RequestMapping方法返回值爲模型數據
  • @RequestParam 用於將請求參數區數據映射到功能處理方法的參數上。

 HTTP動詞

    對於資源的具體操做,由http動詞表示,經常使用的http動詞有如下五個(括號裏是對應的SQL命令):json

  • GET(SELETE) 從服務器取出資源(一個或者多個)
  • POST(CREATE) 在服務器新建一個資源
  • PUT(UPDATE) 在服務器更新資源(客戶端提供改變後的完整資源)
  • PATCH(UPDATE) 在服務器更新資源(客戶端提供改變的屬性)
  • DELETE(DELETE) 從服務器刪除資源

編寫簡單的RESTful API

    定義一個實體bean瀏覽器

public class Book {
    private String name;
    private String isbn;
    private String author;

    public String getAuthor() {
        return author;
    }

    public String getIsbn() {
        return isbn;
    }

    public String getName() {
        return name;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public void setName(String name) {
        this.name = name;
    }
}

    編寫controller服務器

@RestController
@RequestMapping("/book")
public class BookController {
    public static Map<String,Book> bookMap = new HashMap<String,Book>();

    /**
     * 添加一本書
     * @param book
     * @return
     */
    @RequestMapping(value="/",method = RequestMethod.POST)
    public String postBook (@ModelAttribute Book book){
        bookMap.put(book.getIsbn(),book);
        return "SUCCESS";
    }

    /**
     * 查詢出全部book集合
     * @return
     */
    @RequestMapping(value="/",method = RequestMethod.GET)
    public List<Book> getBookList (){
        List<Book> bookList = new ArrayList<Book>(bookMap.values());
        return bookList;
    }

    /**
     * 根據ISBN獲取book
     * @param isbn
     * @return
     */
    @RequestMapping(value="/{isbn}",method = RequestMethod.GET)
    public Book getBook(@PathVariable String isbn){
        Book book = bookMap.get(isbn);
        return book;
    }

    /**
     * 更新book參數
     * @param isbn
     * @param book
     * @return
     */
    @RequestMapping(value="/{isbn}",method = RequestMethod.PUT)
    public String putBook(@PathVariable String isbn,@ModelAttribute Book book){
        Book b = bookMap.get(isbn);
        b.setAuthor(book.getAuthor());
        b.setName(book.getName());
        bookMap.put(isbn,b);
        return "SUCCESS";
    }

    /**
     * 根據isbn刪除book
     * @param isbn
     * @return
     */
    @RequestMapping(value="/{isbn}",method = RequestMethod.DELETE)
    public String deleteBook(@PathVariable String isbn){
        bookMap.remove(isbn);
        return "SUCCESS";
    }
}

    至此一個簡單的RESTful API就寫完了,你們能夠經過瀏覽器插件來驗證正確性,此處咱們使用單元測試對接口進行驗證mvc

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MockServletContext.class)
@WebAppConfiguration
public class DemoApplicationTests {
	private MockMvc mvc;
	@Before
	public void setUp() throws Exception {
		mvc = MockMvcBuilders.standaloneSetup(new BookController()).build();
	}
	String json = "[{\"name\":\"三國演義\",\"isbn\":\"1234\",\"author\":\"羅貫中\"}]";
	String json2 = "{\"name\":\"三國演義12\",\"isbn\":\"1234\",\"author\":\"羅貫中12\"}";
	@Test
	public void contextLoads() throws Exception {
		// 測試Controller
		RequestBuilder request = null;

		//添加一本書
		request = post("/book/")
				.param("name", "三國演義")
				.param("isbn", "1234")
				.param("author", "羅貫中");
		mvc.perform(request)
				.andExpect(content().string(equalTo("SUCCESS")));

		//獲取書本列表,應該有剛纔插入的數據
		request = get("/book/");
		mvc.perform(request)
				.andExpect(status().isOk())
				.andExpect(content().string(equalTo(json)));

		//更新書名和做者
		request = put("/book/1234")
				.param("name", "三國演義12")
				.param("author", "羅貫中12");
		mvc.perform(request)
				.andExpect(content().string(equalTo("SUCCESS")));

		//獲取isbn1234的書,查看是否修改爲功
		request = get("/book/1234");
		mvc.perform(request)
				.andExpect(content().string(equalTo(json2)));

		//刪除
		request = delete("/book/1234");
		mvc.perform(request)
				.andExpect(content().string(equalTo("SUCCESS")));

		//查詢是否刪除成功
		request = get("/book/");
		mvc.perform(request)
				.andExpect(status().isOk())
				.andExpect(content().string(equalTo("[]")));
	}

}

    至此咱們完成了對API的驗證,不須要多餘的配置,我就完成了Spring MVC的功能,完成了一個簡單的RESTful接口。app

相關文章
相關標籤/搜索