2016-07-26 1 views
0

Selon la documentation de directive pathEnd:akka-http pathEnd directive captures chaîne de requête

rejette la demande si le unmatchedPath du [[RequestContext]] est non vide, ou dit autrement: ne passe que sur la demande à son chemin interne si le chemin de la requête a été complètement corrigé.

Mais:

val route = pathPrefix("prefix") { 
     get { 
     pathEnd { 
      complete(HttpEntity("test\n")) 
     } 
     } 
    } 

prises requêtes GET sur le chemin "/ préfixe quelque chose?" Ou "/ préfixe quelque chose = z?", Etc ...

Est-ce normal? Comment pourrais-je le faire rejeter les exemples de chemins ci-dessus?

Merci

J'utilise Akka 2.4.4

Répondre

2

Ce comportement est normal. La chaîne de requête ne fait pas partie du chemin de la requête et ne correspond donc pas. Pour rejeter ces demandes, vous pouvez vérifier explicitement que le jeu de paramètres est vide:

val route = 
    pathPrefix("prefix") { 
    get { 
     pathEnd { 
     parameterSeq { params => 
      validate(params.isEmpty, "Parameters must be empty") { 
      complete(HttpEntity("test\n")) 
      } 
     } 
     } 
    } 
    } 

Get("/prefix") ~> route ~> check { 
    responseAs[String] shouldEqual "test\n" 
} 

Get("/prefix?something") ~> route ~> check { 
    rejection shouldEqual ValidationRejection("Parameters must be empty") 
}