2017-04-19 1 views
1

Face à la question dans le point final aller chercherSpring MVC Endpoint pas récupérer tout passe carte vide {} en requête GET

Ci-dessous est le cas alors que j'appelle la api obtenir la réponse.

http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD

Mais chaque fois que je les données suivantes ensemble, il ne fonctionne pas pourrait tout organisme me aider dans ce problème.

http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD&data={}

@RequestMapping(value = "/apps/{appId_}/users/{username_}", method = RequestMethod.GET) 
@ResponseBody 
@Transactional 
public UserResponseDTO getUserAndToken(@PathVariable Long appId_, @PathVariable String username_, @RequestParam("password") String password_, @RequestParam("data") String datas) throws Exception { 
//do stuff 
} 

EDIT

Ce problème avec toute modification qu'il est fonctionne dans la version Tomcat 7.0.63 Alors que une autre version 7.0.73, 8.0.x + ne fonctionne pas.

Répondre

0

Ce type d'effet de comportement de mise à jour majeure de Tomcat.

Pour une solution rapide, vous pouvez revenir à l'une des anciennes versions, j'ai dégradé tomcat avec 7.0.63.

Après avoir obtenu plus R & D sur Spring MVC Il rejette la demande tout en ajoutant la liste des caractères non valides dans la requête listée ci-dessous.

exclus des caractères US-ASCII non admises dans la syntaxe URI:

control  = <US-ASCII coded characters 00-1F and 7F hexadecimal> 
    space  = <US-ASCII coded character 20 hexadecimal> 
    delims  = "<" | ">" | "#" | "%" | <"> 

Liste des caractères imprudentes sont autorisés, mais peut causer des problèmes:

unwise  = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`" 

Les caractères suivants sont réservés dans un composant de requête et avoir une signification particulière au sein d'un URI/URL:

reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," 

For more information visit.

Solution:

encodeURI("http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD&data={}") 
> http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD&data=%7B%7D 
0

Vous avez oublié de spécifier {appId_} dans value = "/apps/users/{username_}"

Fix: value = "/apps/{appId_}/users/{username_}"

~~~

Votre méthode accepte @RequestParam("data") String datas et que vous envoyez data={} chaîne doit être cité si le correctif est data=""

+0

déjà dans le code, mais j'ai ajouté ici par erreur à removed.But fonctionne toujours pas –

+0

Essayez avec chaîne « données » fixation. – sovas

+0

Donc j'ai besoin de mettre quelque chose comme sage', @RequestParam ("data") String data) '. @sovas J'ai mis selon ce que vous avez dit mais ne fonctionne toujours pas. –