Как сгенерировать URI внутри контроллера в Spring 3 - PullRequest
12 голосов
/ 06 января 2012

Я использую Spring 3.0, и у меня очень простой вопрос, но я не нашел ответа в интернете.Я хочу создать путь (URI) так же, как в моих JSP:

<spring:url value="/my/url" />

Но внутри контроллера.Какую службу использовать?Спасибо!

Редактировать: Может ли это быть связано с этим: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/resources.html#resources-resourceloader?Нет ли лучшего решения для этого?

Ответы [ 3 ]

35 голосов
/ 10 декабря 2012

Россен предлагает золото.

Существует также класс ServletUriComponentsBuilder из 3.1, который создает URL-адреса из текущего запроса в статическом режиме. Например:

ServletUriComponentsBuilder.fromCurrentContextPath().path("/my/additional/path").build().toUriString();

Это самая близкая вещь к <spring:url> в сервлете.

20 голосов
/ 10 января 2012

В Spring MVC 3.1 вы можете использовать UriComponentsBuilder и его подкласс ServletUriComponentsBuilder.Вот пример этого здесь .Вы также можете прочитать о UriComponentsBuilder в справочных документах .

2 голосов
/ 06 января 2012

Я бы сказал

request.getRequestURL() + "/my/url"

делает работу. Нет такой встроенной функциональности, Spring: url вызывает UrlTag.class, который имеет метод ниже для генерации URL, вы можете использовать его как иллюстрацию для своего кода:

private String createUrl() throws JspException {
    HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
    HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
    StringBuilder url = new StringBuilder();
    if (this.type == UrlType.CONTEXT_RELATIVE) {
        // add application context to url
        if (this.context == null) {
            url.append(request.getContextPath());
        }
        else {
            url.append(this.context);
        }
    }
    if (this.type != UrlType.RELATIVE && this.type != UrlType.ABSOLUTE && !this.value.startsWith("/")) {
        url.append("/");
    }
    url.append(replaceUriTemplateParams(this.value, this.params, this.templateParams));
    url.append(createQueryString(this.params, this.templateParams, (url.indexOf("?") == -1)));

    String urlStr = url.toString();
    if (this.type != UrlType.ABSOLUTE) {
        // Add the session identifier if needed
        // (Do not embed the session identifier in a remote link!)
        urlStr = response.encodeURL(urlStr);
    }

    // HTML and/or JavaScript escape, if demanded.
    urlStr = isHtmlEscape() ? HtmlUtils.htmlEscape(urlStr) : urlStr;
    urlStr = this.javaScriptEscape ? JavaScriptUtils.javaScriptEscape(urlStr) : urlStr;

    return urlStr;
}
...