2010-10-27 13 views
4

salutations tous J'ai une méthode post dans un contrôleur qui redirige vers une nouvelle page je d'une manière telle que:Comment encoder une URL dans un cadre de printemps?

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

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

    } 

supposer que l'utilisateur a déjà une session avant la redirection et je veux encoder la nouvelle URL avant la redirection pour maintenir la session de l'utilisateur comment faire?

Répondre

6

Vous pouvez passer le HttpServletResponse en tant que paramètre, et utiliser la méthode encodeRedirectURL(..):

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

Mais d'abord vous assurer que le ressort ne fait pas cela pour vous automatiquement.

+0

merci, mais je ne suis pas sûr si le printemps le fait automatiquement ou non, quelqu'un d'expert avec le printemps peut-il nous dire s'il vous plaît? –

+0

bien, essayez-le ... – Bozho

+0

"Essayer" est une très mauvaise méthode. Cela pourrait marcher d'une façon dans la version/configuration qu'il utilise, et travailler différemment sur un autre (comme en production). –

0

Spring doc est la ressource ultime pour des questions comme celle-ci. De plus, vous pouvez télécharger le code de la bonne version à partir de github, et déboguer pour obtenir une réponse. Quant à la question, consultez ici http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/mvc.html#mvc-redirecting-redirect-prefix, ou vérifier le code source de RedirectView de classe ci-dessous (applicable au printemps 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); 
    } 
} 

En bref, le printemps fait pour vous si vous savez où mettre les valeurs .