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;
}
}
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;
}
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();
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()
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).