Spring MVC常用註解--“姐妹花”@RequestBody和@ResponseBody

1. 引言


在這篇短文中,我們簡要地介紹了Spring MVC中常用的註解 @RequestBody和@ResponseBody。


2. @RequestBody


簡單地說,在@RequestBody註解的幫助下,Spring MVC會自動將HttpRequest body反序列化爲一個Java對象,通常會將HttpRequest body映射到一個DTO或DO。


首先,讓我們看一看Spring控制器方法:


  1. @PostMapping("/request")

  2. public ResponseEntity postController(

  3.  @RequestBody LoginForm loginForm) {

  4.    exampleService.fakeAuthenticate(loginForm);

  5.    return ResponseEntity.ok(HttpStatus.OK);

  6. }


如果HttpRequest body攜帶了正確的JSON,Spring MVC會自動將這個JSON反序列化爲一個Java對象。通常情況下,我們必須將使用了@RequestBody標註的Java類與客戶端發送的JSON相對應。


Tips:

 bug高發區:Java類中的屬性名與JSON中的鍵名必須完全一樣,不一樣的鍵值對是不會序列化到Java對象中的(⊙o⊙)哦。



  1. public class LoginForm {

  2.    private String username;

  3.    private String password;

  4.    // ...

  5. }


在這個例子中,我們將HttpRequest body映射到上面的這個LoginForm 對象。


讓我們使用CURL來測試下這個接口:


  1. curl -i \

  2. -H "Accept: application/json" \

  3. -H "Content-Type:application/json" \

  4. -X POST --data

  5.   '{"username": "johnny", "password": "password"}' "https://localhost:8080/.../request"


這就是一個Spring REST API以及使用@RequestBody 註解將Angular客戶端發送的JSON自動序列化成Java對象所需要的全部內容了!


3. @ResponseBody


@ResponseBody註解告訴控制器,返回的對象需要自動序列化成JSON,並通過HttpResponse body返回給客戶端。


Tips: 
使用@ResponseBody註解修飾後,這個接口返回的將不是一個頁面。


假設我們有一個自定義的Response對象,如下所示:


  1. public class ResponseTransfer {

  2.    private String text;

  3.    // standard getters/setters

  4. }


接下來實現相應的控制器:


  1. @Controller

  2. @RequestMapping("/post")

  3. public class ExamplePostController {

  4.    @Autowired

  5.    ExampleService exampleService;

  6.    @PostMapping("/response")

  7.    @ResponseBody

  8.    public ResponseTransfer postResponseController(

  9.      @RequestBody LoginForm loginForm) {

  10.        return new ResponseTransfer("Thanks For Posting!!!");

  11.     }

  12. }


在瀏覽器的開發者控制檯或者使用像Postman這樣的工具,我們可以看到以下的響應:


  1. {

  2.    "text": "Thanks For Posting!!!"

  3. }


請記住,如果控制器使用了@RestController註解,就不需要再使用 @ResponseBody了,因爲它已經默認添加的。


Tips: 
@RestController是一個組合註解,組合了@Controller和@ResponseBody。


4. 總結


我們已經爲Spring應用構建了一個簡單的Angular客戶端,並演示瞭如何使用@RestController和@ResponseBody註解。


像往常一樣,示例代碼在GitHub上可以找到。



原文發佈時間爲:2018-09-16
本文作者:JackieTang
本文來自雲棲社區合作伙伴“程序猿DD”,瞭解相關信息可以關注“程序猿DD”。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章