Мне нужно начать с этого URL, http: // локальный: 8080 / дом / фильтр? projectId = 1; fileId = 1
И создаю такой контроллер:
@GetMapping("/home/filter/{projectId}/{fileId}")
public String filter(@PathVariable("projectId") int projectId, @PathVariable("fileId") int fileId) {
System.out.println("Project Id " + projectId);
System.out.println("File Id " + fileId);
return "redirect:/home";
}
Когда я тестирую: http: // локальный: 8080 / дом / фильтр? projectId = 1; fileId = 1, я получаю эту ошибку:
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Apr 04 17:24:51 EEST 2018
There was an unexpected error (type=Not Found, status=404).
/home/filter
Я не знаю, что делать ..
подсказка: формат /home/filter?projectId=1;fileId=1 отличается от /home/filter/{projectId}/{fileId}
Это должно быть так: / home / filter {projectId} {fileId} ??




TL; DR: просто вызовите правильный URL: http://localhost:8080/home/filter/1/1
Обратите внимание на разницу между параметрами пути и параметрами запроса.
Сопоставление контроллера использует параметры пути, а вызываемый URL-адрес использует параметры запроса.
Если я попробую вот так, это сработает, но я не понимаю, в чем разница между локальный: 8080 / дом / фильтр / 1/1 и локальный: 8080 / дом / фильтр? ProjectId = 1; fileId = 1
Первый URL-адрес имеет путь /home/filter/1/1 и не содержит параметров запроса. второй URL-адрес имеет путь /home/filter и один параметр запроса с именем projectId со значением 1;fileId=1
Вам необходимо понимать разницу между параметрами запрос и параметрами дорожка в URL-адресе.
? и формируются как name=value (и разделяются &, если параметров больше 1), http://localhost:8080/home/filter?projectId=1&fileId=1./ (и перед ?, если он есть), http://localhost:8080/home/filter/1/1.Для параметров запрос вы используете аннотацию @RequestParam в вашем контроллере.
Пример: для URL-адресов типа http://localhost:8080/home/filter?projectId=1&fileId=1
ваш контроллер может выглядеть так:
@GetMapping("/home/filter")
public String filter(@RequestParam("projectId") int projectId,
@RequestParam("fileId") int fileId) {
...
}
Для параметров дорожка вы используете аннотацию @PathVariable в контроллере.
Пример: для URL-адресов типа http://localhost:8080/home/filter/1/1
контроллер может выглядеть так:
@GetMapping("/home/filter/{projectId}/{fileId}")
public String filter(@PathVariable("projectId") int projectId,
@PathVariable("fileId") int fileId) {
...
}
Обратите внимание на разницу между http://localhost:8080/home/filter?projectId=1;fileId=1 и http://localhost:8080/home/filter?projectId=1&fileId=1
@larsgrefer Спасибо, что указали. Кажется, я перепутал параметры запроса и матрицы. Обновил свой ответ.
Я просто не уверен, реализует ли Spring эту рекомендацию: w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B. 2.2
@larsgrefer Я проверил, реализует ли Spring эту рекомендацию. И похоже, что Spring разделяет параметры запроса только по &, но не по ;.
Если вы используете весеннюю загрузку, то определенно вы делаете что-то из этого, пожалуйста, проверьте здесь .. stackoverflow.com/questions/49375500/…