Por qué la página de actualización de la aplicación web Spring Boot no funciona
@ControllerAdvice
clase GlobalExceptionHandler {
public static final String DEFAULT_ERROR_VIEW = "error";
@ExceptionHandler(value = Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
ModelAndView mav = new ModelAndView();
mav.addObject("excepción", e);
mav.addObject("url", req.getRequestURL ()) ;
mav.setViewName(DEFAULT_ERROR_VIEW);
return mav;
}
}
error. Implementación de la visualización de la página html: cree error.html en el directorio de la plantilla, genere la URL solicitada y el mensaje del objeto de excepción.
Controlador de errores
Inicie la aplicación y visite: http:/ / localhost:8080/hola, consulte la siguiente página de mensajes de error.
Después de implementar lo anterior, solo necesitamos lanzar excepciones en el controlador y, por supuesto, podemos tener muchas excepciones diferentes. Luego, en la clase @ControllerAdvice, haremos coincidir la asignación y el manejo de errores según el tipo de excepción específico que coincida con el tipo de excepción configurado en @ExceptionHandler.
Devolver formato JSON
En el ejemplo anterior, @ControllerAdvice define uniformemente la asignación de diferentes excepciones a diferentes páginas de manejo de errores. Y cuando queramos implementar una API RESTful, los errores devueltos serán datos con formato JSON en lugar de páginas HTML, que también podemos admitir fácilmente.
En resumen, simplemente agregue @ResponseBody después de @ExceptionHandler para convertir el contenido devuelto por la función del controlador al formato JSON.
Aquí hay un ejemplo concreto de un controlador de excepciones que devuelve JSON.
Crear un objeto de retorno JSON unificado, código: tipo de mensaje, mensaje: contenido del mensaje, url: URL solicitada, datos: datos devueltos por la solicitud
Crear un objeto de retorno JSON unificado , código: tipo de mensaje, mensaje: contenido del mensaje: datos devueltos por la solicitud
public class ErrorInfo
public static final Integer OK = 0;
ERROR de entero final estático público = 100;
código de entero privado;
mensaje de cadena privada;
URL de cadena privada;
datos T privados;
// Omitir getter y setter
}
Crea una excepción personalizada para intentar detectar la excepción y devolver json
clase pública MyException extiende la excepción {
myException pública (mensaje de cadena) {
super(mensaje);
}
}
Agregue mapeo json para que el controlador genere la excepción MyException.
@Controller
clase pública HelloController {
@RequestMapping("/json")
public String json() lanza MyException {
throw new MyException("Se produjo el error 2");
}
}
Crea un controlador correspondiente para la excepción MyException
@ControllerAdvice
clase pública GlobalExceptionHandler {
@ExceptionHandler(valor = MyException.class)
@ResponseBody
public ErrorInfo ErrorInfo r.setMessage(e. getMessage()); r.setCode(ErrorInfo.ERROR); r.setData("Algunos datos"); r.setCode(ErrorInfo .ERROR); r.setCode(ErrorInfo.ERROR); r.setData("Algunos datos"). setData("Algunos datos"); r.setUrl(req.getRequestURL(). toString()); return r; } p> } Inicie la aplicación y visite: http://localhost:8080/json Se devuelve el siguiente contenido: { código : 100 , datos: "Algunos datos", Mensaje: "Ocurrió error 2", url: "http://localhost:8080/ json" } En este punto, se ha completado la creación de un manejo de excepciones unificado en Spring Boot. La implementación real aún depende de las anotaciones de Spring MVC. Para un uso más profundo , consulte la documentación de Spring MVC. Esta es la primera vez que Spring Boot crea un manejo de excepciones unificado en Spring Boot.