2010-10-27 4 views
4

привет всем У меня есть метод пост в контроллере, который перенаправляет на новую страницу я способ такие, как:Как закодировать URL в весеннем каркасе?

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

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

    } 

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

ответ

6

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

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

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

+0

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

+0

ну, попробуйте ... – Bozho

+0

«Попытка» - очень плохой метод. Он может работать в одном направлении в версии/настройке, которую он использует, и работать по-другому на другом (например, на производстве). –

0

Весенний документ является основным ресурсом для таких вопросов. Кроме того, вы можете скачать код нужной версии из 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); 
    } 
} 

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

Смежные вопросы