Как кодировать URL в весенних рамках? - PullRequest
4 голосов
/ 27 октября 2010

привет всем, у меня есть метод post в контроллере, который перенаправляет на новую страницу, например:

@RequestMapping(method = RequestMethod.POST)
    public String post(HttpServletRequest request) {

        return "redirect:http://www.x.appName.com/myPage";

    }

Предположим, что у пользователя уже есть сеанс до перенаправления, и я хочузакодировать новый URL перед перенаправлением, чтобы сохранить сеанс пользователя, как это сделать?

Ответы [ 2 ]

6 голосов
/ 27 октября 2010

Вы можете передать HttpServletResponse как параметр и использовать метод encodeRedirectURL(..):

String url = "http://www.x.appName.com/myPage";
url = response.encodeRedirectURL(url);
return "redirect:" + url;

Но сначала убедитесь, что пружина не делает этого автоматически.

0 голосов
/ 12 октября 2015

Spring doc - основной ресурс для подобных вопросов. Кроме того, вы можете скачать код правильной версии с GitHub и отладить для ответа. Что касается вопроса, отметьте здесь http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/mvc.html#mvc-redirecting-redirect-prefix, или проверьте исходный код класса RedirectView ниже (применимо к весне 4.1.0):

    protected void appendQueryProperties(StringBuilder targetUrl, Map<String, Object> model, String encodingScheme)
        throws UnsupportedEncodingException {

    // Extract anchor fragment, if any.
    String fragment = null;
    int anchorIndex = targetUrl.indexOf("#");
    if (anchorIndex > -1) {
        fragment = targetUrl.substring(anchorIndex);
        targetUrl.delete(anchorIndex, targetUrl.length());
    }

    // If there aren't already some parameters, we need a "?".
    boolean first = (targetUrl.toString().indexOf('?') < 0);
    for (Map.Entry<String, Object> entry : queryProperties(model).entrySet()) {
        Object rawValue = entry.getValue();
        Iterator<Object> valueIter;
        if (rawValue != null && rawValue.getClass().isArray()) {
            valueIter = Arrays.asList(ObjectUtils.toObjectArray(rawValue)).iterator();
        }
        else if (rawValue instanceof Collection) {
            valueIter = ((Collection<Object>) rawValue).iterator();
        }
        else {
            valueIter = Collections.singleton(rawValue).iterator();
        }
        while (valueIter.hasNext()) {
            Object value = valueIter.next();
            if (first) {
                targetUrl.append('?');
                first = false;
            }
            else {
                targetUrl.append('&');
            }
            String encodedKey = urlEncode(entry.getKey(), encodingScheme);
            String encodedValue = (value != null ? urlEncode(value.toString(), encodingScheme) : "");
            targetUrl.append(encodedKey).append('=').append(encodedValue);
        }
    }

    // Append anchor fragment, if any, to end of URL.
    if (fragment != null) {
        targetUrl.append(fragment);
    }
}

Короче говоря, Spring сделает это за вас, если вы знаете, куда поместить значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...