SpringBootでRequired String parameter'×××' is not present解決方法

2982 ワード

エラー解析
Postを使用してjsonデータをインタフェースに送信すると、次のエラーが表示されます.
WARN 13392 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by handler execution: org.springframework.web.bind.MissingServletRequestParameterException: 
Required String parameter 'userName' is not present

jsonデータを表示するにはフォーマットの問題はありません.資料を調べると、インタフェースがパラメータを受け入れる問題であることがわかりました.ここでは@RequestParam注釈を使用してデータを受け入れていますが、この注釈は要求体内のjsonデータを受け入れることをサポートしていません.
@PostMapping("/account")
public Object insertAccount(@RequestParam("userName") String userName) {
	...

解決策
以下、対@PathVariable@RequestParam@RequestBodyの3つの比較
注釈
サポートされるタイプ
サポートされているリクエストのタイプ
サポートされているContent-type
リクエストの例
@PathVariable
url
GET
すべて
/test/{id}
@RequestParam
url
GET
すべて
/test?id=1
Body
POST/PUT/DELETE/PATCH
form-dataまたはx-www.form-urlencoded
id:1
@RequestBody
Body
POST/PUT/DELETE/PATCH
json
{"id":1}
インタフェースを@RequestBody注釈方式でjson要求データを受け入れるように変更した後、受信したjsonデータをjsonオブジェクトに変換し、jsonオブジェクトのget()方法を使用してパラメータ値を取得することができ、コードは以下の通りである.
@PostMapping("/account")
public Object insertAccount(@RequestBody JSONObject jsonParam) {
	String userName=jsonParam.get("userName").toString()
	...