SpringBootのRequestParamにてスペース文字を受け取りたい

投稿者: Anonymous

RequestParamのList<String>にて、スペース文字(%20)を受け取りたいのですが、空しか取れません。

@GetMapping(path = "/api/example")
public String param(@RequestParam(name = "param", required = false) List<String> param) {
    if (param == null) {
        param = Collections.emptyList();
    }
    return param.toString();
}

カンマ区切りで下記を実行すると、”AAA”,””,”BBB”となってしまいます。
http://localhost:8080/api/example?param=AAA,%20,BBB
カンマ区切り

下記のようにパラメータ自体を分けてあげれば、正常に動作するのは確認できました。
http://localhost:8080/api/example?param=AAA&param=%20&param=BBB
パラメータ区切り

カンマ区切りでもスペース文字を正常に受け取る方法があればご教授ください。

解決

と同源の事象かと思います。現状フレームワーク組み込みの機能でコントロールすることはできないので自前で実装する必要がありそうです。


Controller引数の型変換はWebDataBinderでカスタマイズできます。

配列への変換であればユーティリティクラスStringArrayPropertyEditorが提供されていたのでこれを用いて実装してみました(コード全体):

@InitBinder
protected void initBinder(final WebDataBinder binder) {
    binder.registerCustomEditor(String[].class, new StringArrayPropertyEditor(",", false, false));
}

@GetMapping(path = "/api/example")
public String param(@RequestParam(name = "param", required = false) final String[] paramArray) {
    final List<String> param;
    if (paramArray == null) {
        param = Collections.emptyList();
    } else {
        param = Arrays.asList(paramArray);
    }
    return param.toString();
}
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *