最先端
複雑なインターフェイスのリクエストの場合、一般的に POST JSON データが使用され、バックエンドは @RequestBody を使用してそれを受け取ります
が、清潔さにこだわる人や、Restful スタイルに厳密に従いたい人にとっては、クエリ データは GET を使用します。 、どうやって? 気づきましたか?
リクエスト
@Data
public class MyRequest{
private String key;
private String[] keys;
private Map<String, String[]> keyValues;
}
コントローラ
@RestController
@RequestMapping("my-controller")
public class MyController
@GetMapping("request1")
public String request1(MyRequest request) {
return JSON.toString(request);
}
}
走る
get http://localhost/my-controller/request1?key=k1&keys=k2,k3&keyValues[k4]=v41,v42&keyValues[k5]=v51,v52
結果
{
"key": "k1",
"keys": ["k2", "k3"]
"keyValues": {
"k4": ["v41", "v42"],
"k5": ["v51", "v52"]
}
}
GET / JSON POSTのデュアルサポート
上記のメソッドには現在問題があり、keyValues フィールドの最終的な Map インスタンスは LinkedHashMap であるため、理論的にはリクエストと同じ順序を維持できますが、Spring は URL リクエストのパラメータ(特定のコードが見つかりません。), したがって、keyValues は実際には TreeMap の効果を達成します。つまり、キーは小さいものから大きいものへと並べ替えられます。リクエストの順序を維持する必要がある場合は、POST JSON メソッドのみを使用できます。
さらに、GET と JOSN POST は両方とも以下をサポートします。
@RestController
@RequestMapping("my-controller")
public class MyController
@RequestMapping("request1")
public String request1(MyRequest requestGet,
@RequestBody(required = false) MyRequest request) {
if (request = null) {
request = requestGet;
}
return JSON.toString(request);
}
}
PS: 誰もそのような奇妙な用法を使用すべきではありません