2010-06-18 3 views
2

Je travaille actuellement sur un projet qui nécessite l'utilisation d'un point-virgule dans notre schéma d'URLs reposantes. Comme vous pouvez l'imaginer, nous avons des problèmes pour résoudre ce problème - le Java HTTPServletRequest sous-jacent ne fonctionne pas bien.java spring restful-url avec un point-virgule

Existe-t-il un moyen de contourner ce problème?

exemple restulf-URL:

http://service/BOB;MIKE/

On dirait Spring ne fonctionne que sur/services/bob - le, MIKE est tronqué.

Nous avons essayé% 3B (ou% 3F quelque chose comme ça) et cela ne fonctionne pas.

Merci d'avance!

ct

+0

Qu'est-ce que vous vous attendez à se produire ici? "MIKE" est-il supposé être un argument du point de terminaison "BOB" ou vous attendez-vous à ce que cette URL atteigne un point de terminaison nommé "BOB; MIKE"? Ou essayez-vous de passer "BOB" et "MIKE" comme arguments au service /? –

+0

nous essayons d'obtenir la chaîne entière BOB; MIKE en ce moment, mais une liste ['bob', 'mike'] serait ok aussi. en ce moment, java-spring obtient juste 'bob'. –

Répondre

2

Voici la liste de tous les délimiteurs vous pouvez légalement utiliser dans un URI:

! $ & () * , ; = + ' : @/? 

essai chacun et voir ce qui fonctionne pour vous.

apparemment le printemps vous prive du ;. Je ne suis pas sûr que ce soit une chose Servlet, mais en tout cas, ça craint. Un framework web devrait permettre aux développeurs de construire n'importe quel URI légal.

+0

s'avère que c'est une chose de servlet. il semble y avoir une erreur dans l'API Java Servlet. –

+0

Avez-vous une référence à ce sujet? Je cours dans le même problème. – Jason

0

Cela semble intentionnel pour Spring, mais il est au moins configurable.

Vous devez indiquer le mappage du gestionnaire à setRemoveSemicolonContent(false) (la valeur par défaut est true). Voir the Javadoc pour plus de détails.

La raison pour laquelle cela a été fait parce qu'ils voulaient apparemment remove the ;jsessionid=... suffix des URI.

2

Alors que @Amos M. Carpenter réponse est correcte, voici la configuration requise pour désactiver ce comportement:

@Configuration 
@EnableWebMvc 
public class WebMvcConfiguration extends WebMvcConfigurerAdapter 
{ 
    @Override 
    public void configurePathMatch(PathMatchConfigurer configurer) 
    { 
     configurer.getUrlPathHelper().setRemoveSemicolonContent(false); 
    } 
} 
Questions connexes