使用springboot框架來(lái)開(kāi)發(fā)的時(shí)候,大部分還是使用restful接口呻纹。
最近在開(kāi)發(fā)使用restful的時(shí)候遇到一些問(wèn)題堆生,在此分享下。
因?yàn)橹皇情_(kāi)發(fā)了后臺(tái)接口雷酪,所以我前端采用的postman進(jìn)行模擬提交淑仆。
postman在body里面提供了form-data,x-www-form-urlencoded蔗怠,raw,binay
四種形式吩跋。關(guān)于這幾種的區(qū)別資料很多寞射,這里不詳細(xì)說(shuō)明。
一開(kāi)始我自然選擇了raw形式锌钮,直接按照json格式模擬桥温,后臺(tái)restful接口采用
@PostMapping注解接收,沒(méi)有任何問(wèn)題梁丘。但我切換成form-data侵浸,按照格式直接填入key-value之后,這時(shí)候報(bào)錯(cuò)了氛谜。Http 415 "Unsupported Media Type" error掏觉。此問(wèn)題找了很久才發(fā)現(xiàn)無(wú)法使用@PostMapping來(lái)接收。必須寫(xiě)成類似如下格式:
@RequestMapping(value="/user", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)值漫。
測(cè)試之后發(fā)現(xiàn)沒(méi)問(wèn)題澳腹,但是當(dāng)我替換成PUT請(qǐng)求之后,發(fā)現(xiàn)獲取的入?yún)⒆兂煽樟恕_@是因?yàn)榭赡苁茿PI只能解析GET遵湖、POST方式的表單提交。其他一些傳統(tǒng)的MVC框架也有類似現(xiàn)象晚吞。這個(gè)時(shí)候就需要自己注入對(duì)PUT請(qǐng)求的處理延旧。這個(gè)在springboot里面處理起來(lái)就非常方便了,直接使用注解注入即可槽地。
@Component
public class PutFilter extends HttpPutFormContentFilter {
}