Как мне получить отображение продолжения из URL в приложении Spring?

#java #spring #spring-boot #mapping

#java #spring #spring-boot #отображение

Вопрос:

У меня есть это приложение Spring, в котором я хочу получить значения из URL, например:

URL-адрес, отправляемый в приложение Spring, является www.example.com/app/account/register . Как мне получить /register часть после /account , когда мой код выглядит следующим образом.

Для этого примера я использовал /register но это может быть /login , /something также.

 @RestController
@RequestMapping("/app")
public class MainController {

    @RequestMapping(value = "/account")
    public boolean AccountServer(@RequestHeader HttpHeaders httpHeaders, @RequestBody Map<String, String> payLoad){
        return true;
    }
}
  

Комментарии:

1. у вас могут быть другие методы контроллера, которые обрабатывают /account/register , /account/login , /account/someting и т.д..

2. Да, но это то, чего я хочу избежать, потому что это будет микросервис, и часть / register должна быть отправлена в другую службу. Немного похоже на шлюз

Ответ №1:

Вы можете использовать @PathVariable аннотацию для получения значения.

 @RestController
@RequestMapping("/app")
public class MainController {

    @RequestMapping(value = "/account/{operation}")
    public boolean AccountServer(@RequestHeader HttpHeaders httpHeaders,
                                 @RequestBody Map<String, String> payLoad,
                                 @PathVariable("operation") String operation){
  
        return true;
    }
}
  

Ответ №2:

Используйте UriComponentsBuilder в качестве параметра, он будет введен Spring и инициализирован текущим URI. Затем вы можете преобразовать в UriComponents UriComponents для запроса пути.

 @RestController
@RequestMapping("/app")
public class MainController {

    @RequestMapping(value = "/account")
    public boolean AccountServer(UriComponentsBuilder builder, @RequestHeader HttpHeaders httpHeaders, @RequestBody Map<String, String> payLoad){
        List<String> pathSegments = builder.build().getPathSegments();
        ...
        return true;
    }
}