RESTful Web 服務(wù)介紹
本節(jié)我們將開發(fā)一個(gè)簡單的 RESTful Web 服務(wù)。
RESTful Web 服務(wù)與傳統(tǒng)的 MVC 開發(fā)一個(gè)關(guān)鍵區(qū)別是返回給客戶端的內(nèi)容的創(chuàng)建方式:傳統(tǒng)的 MVC 模式開發(fā)會直接返回給客戶端一個(gè)視圖,但是 RESTful Web 服務(wù)一般會將返回的數(shù)據(jù)以 JSON 的形式返回,這也就是現(xiàn)在所推崇的前后端分離開發(fā)。
為了節(jié)省時(shí)間,本篇內(nèi)容的代碼是在 Spring Boot 版 Hello World & Spring Boot 項(xiàng)目結(jié)構(gòu)分析 基礎(chǔ)上進(jìn)行開發(fā)的。
內(nèi)容概覽
通過下面的內(nèi)容你將學(xué)習(xí)到下面這些東西:
- Lombok 優(yōu)化代碼利器
@RestController
-
@RequestParam
以及@Pathvairable
-
@RequestMapping
、@GetMapping
… Responsity
下載 Lombok 優(yōu)化代碼利器
因?yàn)楸敬伍_發(fā)用到了 Lombok 這個(gè)簡化 Java 代碼的工具,所以我們需要在 pom.xml 中添加相關(guān)依賴。如果對 Lombok 不熟悉的話,我強(qiáng)烈建議你去了解一下,可以參考這篇文章:《十分鐘搞懂Java效率工具Lombok使用與原理》
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
并且你需要下載 IDEA 中支持 lombok 的插件:
RESTful Web 服務(wù)開發(fā)
假如我們有一個(gè)書架,上面放了很多書。為此,我們需要新建一個(gè) Book
實(shí)體類。
com.example.helloworld.entity
/**
* @author shuang.kou
*/
@Data
public class Book {
private String name;
private String description;
}
我們還需要一個(gè)控制器對書架上進(jìn)行添加、查找以及查看。為此,我們需要新建一個(gè) BookController
。
import com.example.helloworld.entity.Book;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/api")
public class BookController {
private List<Book> books = new ArrayList<>();
@PostMapping("/book")
public ResponseEntity<List<Book>> addBook(@RequestBody Book book) {
books.add(book);
return ResponseEntity.ok(books);
}
@DeleteMapping("/book/{id}")
public ResponseEntity deleteBookById(@PathVariable("id") int id) {
books.remove(id);
return ResponseEntity.ok(books);
}
@GetMapping("/book")
public ResponseEntity getBookByName(@RequestParam("name") String name) {
List<Book> results = books.stream().filter(book -> book.getName().equals(name)).collect(Collectors.toList());
return ResponseEntity.ok(results);
}
}
-
@RestController
**將返回的對象數(shù)據(jù)直接以 JSON 或 XML 形式寫入 HTTP 響應(yīng)(Response)中。**絕大部分情況下都是直接以 JSON 形式返回給客戶端,很少的情況下才會以 XML 形式返回。轉(zhuǎn)換成 XML 形式還需要額為的工作,上面代碼中演示的直接就是將對象數(shù)據(jù)直接以 JSON 形式寫入 HTTP 響應(yīng)(Response)中。關(guān)于@Controller
和@RestController
的對比,我會在下一篇文章中單獨(dú)介紹到(@Controller
+@ResponseBody
=@RestController
)。 -
@RequestMapping
:上面的示例中沒有指定 GET 與 PUT、POST 等,因?yàn)?*@RequestMapping
默認(rèn)映射所有HTTP Action**,你可以使用@RequestMapping(method=ActionType)
來縮小這個(gè)映射。 -
@PostMapping
實(shí)際上就等價(jià)于@RequestMapping(method = RequestMethod.POST)
,同樣的@DeleteMapping
,@GetMapping
也都一樣,常用的 HTTP Action 都有一個(gè)這種形式的注解所對應(yīng)。 -
@PathVariable
:取url地址中的參數(shù)。@RequestParam
url的查詢參數(shù)值。 -
@RequestBody
:可以將 HttpRequest body 中的 JSON 類型數(shù)據(jù)反序列化為合適的 Java 類型。 -
ResponseEntity
: 表示整個(gè)HTTP Response:狀態(tài)碼,標(biāo)頭和正文內(nèi)容。我們可以使用它來自定義HTTP Response 的內(nèi)容。
運(yùn)行項(xiàng)目并測試效果
這里我們又用到了開發(fā) Web 服務(wù)必備的 Postman 來幫助我們發(fā)請求測試。
1.使用 post 請求給書架增加書籍
這里我模擬添加了 3 本書籍。
2.使用 Delete 請求刪除書籍
這個(gè)就不截圖了,可以參考上面發(fā)Post請求的方式來進(jìn)行,請求的 url: localhost:8333/api/book/1。
3.使用 Get 請求根據(jù)書名獲取特定的書籍文章來源:http://www.zghlxwxcb.cn/news/detail-682641.html
請求的 url:localhost:8333/api/book?name=book1文章來源地址http://www.zghlxwxcb.cn/news/detail-682641.html
到了這里,關(guān)于Spring——RESTful Web服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!