Знак равенства и точки с запятой в переменной пути Spring - PullRequest
0 голосов
/ 24 января 2020

У меня есть контроллер rest с путем, например: "/abc/{variable}"

    @GetMapping(produces = "application/json", value = "/abc/{variable}")
    @ResponseStatus(HttpStatus.OK)
    public List<String[]> controller(@PathVariable String variable) {
        //code
    }

Я хотел бы передать строку с несколькими точками с запятой и знак равенства с запросом, подобным:

{host } / abc / xyz = 123; xyz

и получить полную строку xyz=123;xyz; в переменной пути метода контроллера.

Я настроил Spring так, чтобы не удалять точки с запятой следующим образом:

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        UrlPathHelper urlPathHelper = new UrlPathHelper();
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }

Но в этом примере результат усекается до xyz=123. (возможно, из-за того, как матричные переменные работают в Spring). Можно ли использовать переменную пути с несколькими точками с запятой и знаками равенства в Spring и захватить полную строку?

1 Ответ

0 голосов
/ 24 января 2020

Поскольку ; (а также =) является специальным символом , его необходимо кодировать перед отправкой URL-адреса на сервер. После кодирования ваш URL превращается в:

{host}/abc/xyz%3D123%3Bxyz

Spring предоставляет служебный класс UriUtils для операций кодирования / декодирования. Поэтому, если вы составляете URL на стороне сервера, вы можете использовать метод UriUtils.encodePath(), чтобы убедиться, что все специальные символы в пути закодированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...