#spring #spring-boot #spring-mvc
#весна #весенняя загрузка #spring-mvc
Вопрос:
В приведенном ниже коде есть два метода, аннотированных @GetMapping
аннотацией, один ожидает пустой путь, другой ожидает переменную path .
@Controller
@RequestMapping("/")
public class BasicController {
@GetMapping()
public String get(Model model) {
// doing something
}
@GetMapping("/{variable}")
public String getWithPathVar(@PathVariable("variable") String variable, Model model) {
// doing something different
}
}
Проблема: когда приложение запущено, и я нажимаю «www.myurl.com /» он вводит оба метода, даже если нет параметра path. Как я могу это исправить?
Комментарии:
1. Пытались ли вы удалить @RequestMapping(«/») из контроллера, а затем поместить @GetMapping(«/») в первый метод get и @GetMapping(«/{variable}») во второй метод getWithPathVar()
2. Я перепробовал много разных комбинаций, но, видимо, не эту 🙂 Это помогло. Спасибо!
Ответ №1:
Если это так, это звучит как ошибка или какая-то неправильная настройка с фильтрами. Я не могу воспроизвести это поведение на Spring 5.2.7
. Вот статья, в которой объясняется, как Spring работает под капотом.
Если вы не можете обновить версию Spring, вы можете использовать только одну конечную точку в качестве обходного пути.
@GetMapping("/{variable}")
public String getWithPathVar(@PathVariable("variable") String variable, Model model) {
// doing something different
if(variable != null) {
// fulfill the normal workflow
} else {
// call ex get() workflow
}
}
Комментарии:
1. Я использую Spring v5.2.8 с конфигурацией по умолчанию: (Комментарий, который добавил @implosivesilence, помог…
2. Как я уже упоминал выше, я не могу воспроизвести его даже для
5.2.8
. Кстати, что вы возвращаете в этих двух методах? Еще одна важная вещь: вы используете@Controller
с конечными точками без@ResponseBody
вместо@RestController
. В этом случае возвращаемое значение должно интерпретироваться Spring как имя представления