226 votes

déclencheur 404 dans le contrôleur printemps-mvc?

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.

344voto

axtavt Points 126632

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(); 
        }
    }
}
 

36voto

matt b Points 73770

Réécrivez la signature de votre méthode pour qu'elle accepte HttpServletResponse comme paramètre, de manière à pouvoir y appeler setStatus(int) .

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-arguments

25voto

michal.kreuzman Points 3214

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);

    ...

  }
 

10voto

Ralph Points 42744

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);
        }
    }
}
 

-1voto

Rajith Delantha Points 183

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.com

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.

Powered by:

X