J'ai un problème étrange lors de l'exécution d'une requête HTTP "DELETE" au printemps.
J'ai une méthode de contrôleur pour laquelle j'ai mappé une demande DELETE à:
@RequestMapping(value = "/{authorizationUrl}",method=DELETE)
public void deleteAuthorizationServer(
@RequestHeader(value="Authorization") String authorization,
@PathVariable("authorizationUrl") String authorizationUrl)
throws IOException {
System.out.println("TEST");
}
Le contrôleur est mappé à l'aide de @RequestMapping("/authorization_servers");
Lorsque j'envoie une demande via mon client DEV Http, je reçois la réponse suivante: 405 Http method DELETE is not supported by this URL
.
La demande ressemble à ceci:
DELETE localhost:8080/authorization_servers/asxas
Headers:
Authorization: "test:<stuff>"
Si quelqu'un peut examiner cela et m'aider, je vous en serais reconnaissant
Cela fonctionnera:
@RequestMapping(value = "/{authorizationUrl}", method = DELETE)
public @ResponseBody void deleteAuthorizationServer(@RequestHeader(value="Authorization") String authorization,
@PathVariable("authorizationUrl") String authorizationUrl){
System.out.printf("Testing: You tried to delete %s using %s\n", authorizationUrl, authorization);
}
Il vous manquait @ResponseBody. Votre méthode était en train de se faire appeler; c'est ce qui s'est passé après que cela produise le code d'erreur.
Votre annotation devrait ressembler à ceci:
@RequestMapping(value = "/{authorizationUrl}",method=RequestMethod.DELETE)
Je ne sais pas d'où vous avez obtenu cette variable DELETE. :-)
Si le modèle @RequestMapping
ne correspond pas ou est invalid, il en résulte un 404 non trouvé. Cependant, si cela correspond à un autre mappage avec une méthode différente (ex. GET), il en résulte 405 Http method DELETE is not supported
.
Mon problème était comme celui-ci, sauf que ma requête était la cause. C'était ça:
@RequestMapping(value = { "/thing/{id:\\d+" }, method = { RequestMethod.DELETE })
Est-ce que tu le vois? L'attelle de fermeture interne est manquante, elle devrait être: { "/thing/{id:\\d+}" }
Le \\d+
est une expression régulière permettant de faire correspondre un ou plusieurs chiffres. Les accolades délimitent le paramètre dans le chemin à utiliser avec @PathVariable
.
Comme il est invalide, il ne peut pas correspondre à ma demande DELETE: http://example.com/thing/33 Ce qui aurait entraîné une erreur 404 non trouvée, cependant, j'ai eu un autre mappage pour GET:
@RequestMapping(value = { "/thing/{id:\\d+}" }, method = { RequestMethod.GET })
Étant donné que le modèle d'accolade est correct, mais qu'il ne s'agit pas d'une méthode DELETE, la méthode d'erreur 405 n'est pas prise en charge.
J'espère que cela vous aide!
assurez-vous également que vous l'appelez avec "Content-Type" header="text/html"
. Sinon, modifiez-le ou spécifiez-le dans la variable requestMapping
. Si cela ne correspond pas, vous obtenez le même 405.
J'espère que ça aide quelqu'un.