105 votos

gatillo 404 en primavera-controlador mvc?

¿Cómo puedo obtener una primavera 3.0 controlador para desencadenar un error 404?

Tengo un controlador con @RequestMapping(value = "/**", method = RequestMethod.GET) y para algunas urls de acceso al controlador quiero que el contenedor de llegar con un mensaje de error 404.

199voto

axtavt Puntos 126632

Desde la Spring de 3.0 usted también puede lanzar una Excepción declarado con @ResponseStatus anotación:

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

22voto

matt b Puntos 73770

Vuelva a escribir su firma de método para que acepte HttpServletResponse como parámetro, de modo que usted puede llamar a setStatus(int) .

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

18voto

michal.kreuzman Puntos 3214

Me gustaría mencionar que hay excepciones (no sólo) para 404 por defecto proporcionada por la Spring. Ver la Spring documentación para más detalles. Así que si usted no necesita su propia excepción, usted puede simplemente hacer esto:

 @RequestMapping(value = "/**", method = RequestMethod.GET)
 public ModelAndView show() throws NoSuchRequestHandlingMethodException {
    if(something == null)
         throw new NoSuchRequestHandlingMethodException("show", YourClass.class);

    ...

  }

5voto

Ralph Puntos 42744

Si su método de controlador es algo así como manejo de archivos, a continuación, ResponseEntity es muy útil:

@Controller
public class SomeController {
    @RequestMapping.....
    public ResponseEntity handleCall() {
        if (isFound()) {
            return new ResponseEntity(...);
        }
        else {
            return new ResponseEntity(404);
        }
    }
}

0voto

Rajith Delantha Puntos 183

Simplemente puede usar web.xml para añadir el código de error y la página de error 404. Pero asegúrese de error 404 de página no deben localizar en WEB-INF.

<error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
</error-page>

Esta es la forma más sencilla de hacerlo, pero esta tiene algunas limitaciones. Supongo que si usted desea agregar el mismo estilo para esta página que añadir otras páginas. De esta manera no se puede. Usted tiene que utilizar la @ResponseStatus(value = HttpStatus.NOT_FOUND)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X