web-dev-qa-db-fra.com

Comment obtenir l'URL de la demande dans Spring Boot RestController

J'essaie d'obtenir l'URL de la demande dans un RestController. RestController a plusieurs méthodes annotées avec @RequestMapping pour différents URI et je me demande comment je peux obtenir l’URL absolue à partir du @RequestMapping annotations.

@RestController
@RequestMapping(value = "/my/absolute/url/{urlid}/tests"
public class Test {
   @ResponseBody
   @RequestMapping(value "/",produces = "application/json")
   public String getURLValue(){
      //get URL value here which should be in this case, for instance if urlid      
       //is 1 in request then  "/my/absolute/url/1/tests"
      String test = getURL ?
      return test;
   }
} 
25
NRA

Vous pouvez essayer d'ajouter un argument supplémentaire de type HttpServletRequest à la méthode getUrlValue():

@RequestMapping(value ="/",produces = "application/json")
public String getURLValue(HttpServletRequest request){
    String test = request.getRequestURI();
    return test;
}
36
Deepak

Si vous ne souhaitez pas dépendre de HATEOAS ou de javax.* namespace, utilisez ServletUriComponentsBuilder pour obtenir l’URI de la requête en cours:

import org.springframework.web.util.UriComponentsBuilder;

ServletUriComponentsBuilder.fromCurrentRequest();
ServletUriComponentsBuilder.fromCurrentRequestUri();
12
mohamnag

Permet d'obtenir n'importe quelle URL sur votre système, pas seulement une actuelle.

import org.springframework.hateoas.mvc.ControllerLinkBuilder
...
ControllerLinkBuilder linkBuilder = ControllerLinkBuilder.linkTo(methodOn(YourController.class).getSomeEntityMethod(parameterId, parameterTwoId))

URI methodUri = linkBuilder.Uri()
String methodUrl = methodUri.getPath()
5
Cyva

Ajoutez un paramètre de type UriComponentsBuilder à votre méthode de contrôleur. Spring vous donnera une instance préconfigurée avec l'URI de la requête en cours, que vous pourrez ensuite personnaliser (par exemple, en utilisant MvcUriComponentsBuilder.relativeTo pour pointer sur un autre contrôleur en utilisant le même préfixe).

0
chrylis