Comment puis-je obtenir un contrôleur Spring 3.0 pour déclencher un 404?
J'ai un contrôleur avec @RequestMapping(value = "/**", method = RequestMethod.GET)
et pour certaines URL accédant au contrôleur, je veux que le conteneur génère un 404.
Comment puis-je obtenir un contrôleur Spring 3.0 pour déclencher un 404?
J'ai un contrôleur avec @RequestMapping(value = "/**", method = RequestMethod.GET)
et pour certaines URL accédant au contrôleur, je veux que le conteneur génère un 404.
Depuis Spring 3.0, vous pouvez également lancer une exception déclarée avec l'annotation @ResponseStatus
:
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
...
}
@Controller
public class SomeController {
@RequestMapping.....
public void handleCall() {
if (isFound()) {
// whatever
}
else {
throw new ResourceNotFoundException();
}
}
}
Je tiens à mentionner qu'il existe une exception (pas seulement) pour 404 par défaut fourni par Spring. Voir la documentation du printemps pour plus de détails. Donc, si vous n'avez pas besoin de votre propre exception, vous pouvez simplement faire ceci:
@RequestMapping(value = "/**", method = RequestMethod.GET)
public ModelAndView show() throws NoSuchRequestHandlingMethodException {
if(something == null)
throw new NoSuchRequestHandlingMethodException("show", YourClass.class);
...
}
Si votre méthode de contrôleur est pour quelque chose comme la gestion des fichiers, alors ResponseEntity
est très pratique:
@Controller
public class SomeController {
@RequestMapping.....
public ResponseEntity handleCall() {
if (isFound()) {
return new ResponseEntity(...);
}
else {
return new ResponseEntity(404);
}
}
}
Vous pouvez simplement utiliser web.xml pour ajouter un code d'erreur et une page d'erreur 404. Mais assurez-vous que la page d'erreur 404 ne se trouve pas sous WEB-INF.
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
C'est le moyen le plus simple de le faire, mais cela a ses limites. Supposons que vous souhaitiez ajouter le même style à cette page que vous avez ajouté d'autres pages. De cette façon, vous ne pouvez pas y arriver. Vous devez utiliser le @ResponseStatus(value = HttpStatus.NOT_FOUND)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.