Как создать контроллер для определенного URL

Мне нужно начать с этого 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

Я не знаю, что делать ..

Если вы используете весеннюю загрузку, то определенно вы делаете что-то из этого, пожалуйста, проверьте здесь .. stackoverflow.com/questions/49375500/…

Sagar Kharab 04.04.2018 16:31

подсказка: формат /home/filter?projectId=1;fileId=1 отличается от /home/filter/{projectId}/{fileId}

jhamon 04.04.2018 16:31

Это должно быть так: / home / filter {projectId} {fileId} ??

abc 04.04.2018 16:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
122
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

TL; DR: просто вызовите правильный URL: http://localhost:8080/home/filter/1/1

Обратите внимание на разницу между параметрами пути и параметрами запроса.

Сопоставление контроллера использует параметры пути, а вызываемый URL-адрес использует параметры запроса.

Если я попробую вот так, это сработает, но я не понимаю, в чем разница между локальный: 8080 / дом / фильтр / 1/1 и локальный: 8080 / дом / фильтр? ProjectId = 1; fileId = 1

abc 04.04.2018 16:38

Первый URL-адрес имеет путь /home/filter/1/1 и не содержит параметров запроса. второй URL-адрес имеет путь /home/filter и один параметр запроса с именем projectId со значением 1;fileId=1

larsgrefer 04.04.2018 16:42
Ответ принят как подходящий

Вам необходимо понимать разницу между параметрами запрос и параметрами дорожка в 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 04.04.2018 17:12

@larsgrefer Спасибо, что указали. Кажется, я перепутал параметры запроса и матрицы. Обновил свой ответ.

Thomas Fritsch 04.04.2018 17:24

Я просто не уверен, реализует ли Spring эту рекомендацию: w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.‌ 2.2

larsgrefer 04.04.2018 17:28

@larsgrefer Я проверил, реализует ли Spring эту рекомендацию. И похоже, что Spring разделяет параметры запроса только по &, но не по ;.

Thomas Fritsch 05.04.2018 17:07

Другие вопросы по теме