Wenn in spring-mvc kein Pfad für die Servlet-Zuordnung vorhanden ist, wird die folgende Warnung im Protokoll angezeigt. In diesem Fall werfen Sie eine Ausnahme auf die Federseite und fangen Sie sie auf. Dies behandelt 404 (unter Verwendung von spring anstelle von web.xml).
[org.springframework.web.servlet.PageNotFound](default task-2) No mapping found for HTTP request with URI [/xxxx] in DispatcherServlet with name 'dispatcher'
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebMVCApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
Class<?>[] configurations = {AppConfiguration.class};
return configurations;
}
@Override
protected Class<?>[] getServletConfigClasses() {
Class<?>[] configs = {};
return configs;
}
@Override
protected String[] getServletMappings() {
String[] mappings = {"/"};
return mappings;
}
@Override
protected DispatcherServlet createDispatcherServlet(WebApplicationContext servletAppContext) {
DispatcherServlet dispatcherServlet = (DispatcherServlet)super.createDispatcherServlet(servletAppContext);
dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
return dispatcherServlet;
}
}
Wenn Sie setThrowExceptionIfNoHandlerFound auf true setzen, wird eine Ausnahme ausgelöst, wenn der der Anforderung entsprechende Handler nicht gefunden wird.
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.NoHandlerFoundException;
@RestControllerAdvice
public class NoHandlerFoundControllerAdvice {
@ExceptionHandler(NoHandlerFoundException.class)
public ResponseEntity<String> handleNoHandlerFoundException(NoHandlerFoundException ex) {
return new ResponseEntity<>("not found", HttpStatus.NOT_FOUND);
}
}
Erstellen Sie eine Klasse, die ControllerAdvice (oder ControllerAdvice) zuweist, um die Ausnahmebehandlung zu beschreiben, die mehreren Controllern gemeinsam ist. Da spring früher so eingestellt wurde, dass NoHandlerFoundException ausgelöst wird, wenn dem Pfad kein Handler entspricht, geben Sie dies in ExceptionHandler an.
Recommended Posts