Spring контроллер не работает, когда последний PathVariable в RequestMapping имеет только - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь сопоставить запрос с контроллером Spring, но он не работает должным образом

Я получаю ошибку 404, когда пытаюсь / просто / проверить / что-то / ..... и мое сопоставлениеследующим образом @RequestMapping(path="/simple/test/{string1}/{string2}")

Ниже мой код

@RequestMapping(path = "/search/test/{string1}/{string2}", produces = APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public SearchResult search( @PathVariable String string1, @PathVariable Optional string2) {
    if (!query.isPresent()) {
        return service.getLastQueries(string1, string2);
    }
}

, когда {string2} содержит / или только .... тогда я получаю ошибку 404.Например, {string2} - это ....... или какой-то / thing

Ответы [ 3 ]

0 голосов
/ 31 мая 2019

Как отметил @DDovzhenko, вы не можете просто объявить необязательный тип. На самом деле вы не должны этого делать, потому что вы ожидаете строку и должны придерживаться этого. В сочетании с

required=false

атрибут @PathVariable, он должен работать нормально:

@PathVariable(required=false) String urVariable
0 голосов
/ 06 июня 2019

Спасибо за ваши ответы.

Но в моем случае вторая строка иногда должна быть необязательной. Я изменил вторую строку на «RequestParam», чтобы новый URL был примерно таким /simple/test?q=something

новое сопоставление запросов будет @RequestMapping(path="/simple/test/{string1}")

, поэтому код решения

@RequestMapping(path = "/search/test/{string1}", produces = APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public SearchResult search( @PathVariable String string1, @RequestParam Optional<String> string2) {
    if (!string2.isPresent()) {
        return service.getLastQueries(string1, string2);
    }
}
0 голосов
/ 31 мая 2019

Недостаточно сделать входной параметр равным Optional, также следует установить required=false в аннотации @PathVariable.

@PathVariable(required=false) Optional<String> string2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...