Gestire l’errore 404 con il controller Spring

Io uso @ExceptionHandler per gestire le eccezioni generate dalla mia app Web, nel mio caso la mia app restituisce la risposta JSON con lo HTTP status per le risposte di errore al client.

Tuttavia, sto cercando di capire come gestire l’ error 404 per restituire una risposta JSON simile a quella gestita da @ExceptionHandler

Aggiornare:

Voglio dire, quando si accede a un URL che non esiste

Il modo più semplice per scoprirlo è utilizzare quanto segue:

 @ExceptionHandler(Throwable.class) public String handleAnyException(Throwable ex, HttpServletRequest request) { return ClassUtils.getShortName(ex.getClass()); } 

Se l’URL si trova nell’ambito di DispatcherServlet, qualsiasi 404 causato da errori di digitazione o qualsiasi altra cosa verrà catturato da questo metodo, ma se l’URL digitato è al di fuori della mapping URL di DispatcherServlet, è necessario utilizzare:

  404 /404error.html  

o

Fornire il mapping “/” all’URL di mapping di DispatcherServlet in modo da gestire tutti i mapping per la particolare istanza del server.

Io uso spring 4.0 e la configurazione di java. Il mio codice di lavoro è:

 @ControllerAdvice public class MyExceptionController { @ExceptionHandler(NoHandlerFoundException.class) public ModelAndView handleError404(HttpServletRequest request, Exception e) { ModelAndView mav = new ModelAndView("/404"); mav.addObject("exception", e); //mav.addObject("errorcode", "404"); return mav; } } 

In JSP:

  

HTTP Status 404 - Page Not Found

The page you requested is not available. You might try returning to the ">home page.

Per la param configurazione Init:

 public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override public void customizeRegistration(ServletRegistration.Dynamic registration) { registration.setInitParameter("throwExceptionIfNoHandlerFound", "true"); } } 

Oppure tramite xml:

  rest-dispatcher org.springframework.web.servlet.DispatcherServlet  throwExceptionIfNoHandlerFound true   

Vedere anche: Spring MVC Spring Security e gestione degli errori

Con spring> 3.0 utilizzare @ResponseStatus

  @ResponseStatus(value = HttpStatus.NOT_FOUND) public class ResourceNotFoundException extends RuntimeException { ... } @Controller public class MyController { @RequestMapping..... public void handleCall() { if (isFound()) { // do some stuff } else { throw new ResourceNotFoundException(); } } } 
 public final class ResourceNotFoundException extends RuntimeException { } @ControllerAdvice public class AppExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) public String handleNotFound() { return "404"; } } 

Basta definire un’eccezione, un ExceptionHandler, lanciare l’eccezione dal controller del codice aziendale.

È ansible utilizzare il modo standard della servlet per gestire l’errore 404. Aggiungi il seguente codice in web.xml

  404 /404error.html