Postman發送POST請求到Spring Boot的正確姿勢


最近用Spring Boot搭建了一些restful api,寫起來真的很爽。但是當用Postman測試一些POST請求的接口的時候卻遇到一些問題,上網沖浪查了一堆博客資料,發現都講得不清不楚,於是記錄下來希望也能讓同道少走彎路。

假設有一個POST請求的接口是接受一個對象而不是單個參數,如注冊接口,需要傳遞一個MynUser對象,該對象的結構如下:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyUser {
    private String username;
    private String password;
}

我們的Controller文件中接口是這樣的:

public class UserController {
    @Autowired
    UserService userService;
    @Autowired
    TokenService tokenService;
    
    @PostMapping("/register")
    public JsonResultObject register(@RequestBody MyUser user) {
        // other logic codes, just skip it
        return userService.register(user);
    }
}

在login方法上傳入的是一個對象LoginUser,需要用到@RequestBody注解。一旦使用了這個注解,Postman的請求頭里面要設置成"Content-Type:application/json"。否則會出現圖1的報錯,然而光是這樣設置還是不夠的。

​ 圖1 unspported Media Type

如果在Postman中使用form-data或者x-www-form-urlencoded方式,如圖2所示,則會有JSON parse error。

​ 圖2 json parse報錯

千萬別以為自己使用的第三方json包出問題了,網上還有人說是因為使用的jackson的版本和Spring Boot版本不匹配,其實真不見得是這個問題。正確的做法是,使用raw方式填寫json字符串即可,如圖3所示:


圖3 成功請求
終於成功注冊了一個用戶,喜大普奔啊!
另外,如果是傳遞單個參數,可以使用@RequestParam,那么Postman就可以使用form-data方式傳遞了,這很簡單。

經過這個事情,讓我想到了幾年前還在寫NodeJS項目的歲月,在和騰訊團隊和yh團隊對接接口的時候,貌似傳遞post參數也是需要用raw方式傳遞,否則那邊處理不了,騰訊微信后台是用的C++,而yh是用的Java(估計是Spring)。

============= 華麗分隔符 ========================
我司正在高薪招聘各種開發人才,北京、廣州 Java高級研發、php高級管理崗位(全國范圍,不限制)、測試、運維高級崗位。請在看機會的同學與我私信聯系,或者加我微信號溝通:UUUUUTW。我是極客君,歡迎優秀人才用簡歷敲門,我真心內推!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM