Отображение запросов Spring MVC не работает на RestController

#java #spring-mvc #spring-restcontroller #request-mapping

#java #spring-mvc #spring-restcontroller #сопоставление запросов

Вопрос:

Я хочу иметь класс RestController с базовым отображением «/user» (чтобы у разных функций были пути типа «/ user / add», «/ user / remove» и т.д. Или использовать POST / GET и т.д.)

Это та часть, которую я не понимаю и не могу приступить к работе:

 @RestController
public class UserController {

  @GetMapping("/user")
  public Response login(Principal principal){
    //some output
  }
}
  

Ожидаемым поведением в этом случае было бы то, что я могу получить доступ к своим выводам в разделе «/ user». Это работает так, как ожидалось.
Теперь, если я изменю его на следующее (поскольку все функции в этом контроллере должны иметь путь, начинающийся с «/ user», это было бы чище)

 @RestController
@RequestMapping("/user")
public class UserController {

  @GetMapping("/")
  public Response login(Principal principal){
    //some output
  }
}
  

Я получаю страницу с ошибкой 404 и больше не могу получить доступ к «/ user»
Все найденные мной примеры используют один и тот же синтаксис (или иногда @RequestMapping(path=»/user»), но это тоже не сработало), и я не знаю, почему это не работает.
Кто-нибудь может сказать мне, в чем моя ошибка?

Ответ №1:

Если вы используете этот код:

 @RestController
@RequestMapping("/user")
public class UserController {

@GetMapping("/")
public Response login(Principal principal){
//some output
 }
}
  

Тогда ваш URL-адрес должен содержать «/» в конце, например «http://localhost:8080/user /«

Я бы просто выбросил символ «/» из @GetMapping(«/») и оставил бы так:

 @RestController
@RequestMapping("/user")
public class UserController {

@GetMapping
public Response login(Principal principal){
//some output
 }
}
  

И если вам нужна карта get или post, вы можете использовать ее следующим образом:

 @RestController
@RequestMapping("/user")
public class UserController {

@GetMapping("/add")
public SampleObj getJson() {
    return new SampleObj();
 }
}
  

Это должно сработать.