SpringMVC SpringBoot Get リクエストは複雑なパラメータを受け取ります

最先端

複雑なインターフェイスのリクエストの場合、一般的に 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: 誰もそのような奇妙な用法を使用すべきではありません

おすすめ

転載: blog.csdn.net/qq_39609993/article/details/124450565