SpringBoot recopila información de excepción de manera uniforme y la devuelve al front-end

Tabla de contenido

escena aplicable

Implementación

Combinando objetos Servlet

@RestControllerAdvice


escena aplicable

Por lo general, cuando el front-end y el back-end interactúan, después de que el back-end verifica los parámetros del front-end, se lanzará una excepción personalizada para la información que no pasa la verificación, pero una vez que el back-end lanza una excepción, el el servicio de interfaz en segundo plano informará un error 500

Para algunos errores lógicos, solo queremos solicitar al usuario esta información. En este momento, necesitamos capturar la excepción lanzada y luego encapsularla en un mensaje de solicitud y devolverlo al front-end. El más común es intentar atrapar.

@RequestMapping("/test")
    public String test() {
        try {
            throw new RuntimeException("出错了。。。。");
        }catch (Exception ex){
            return ex.getMessage();
        }
    }

 La interacción con el front-end está en la capa del controlador, lo que significa que cada uno de nuestros métodos de controlador debe agregar una captura de prueba, que es demasiado redundante, por lo que adoptamos un método unificado de recopilación y procesamiento de excepciones para devolver la excepción.

Implementación

SpringBoot proporciona una anotación útil, @RestControllerAdvice @ExceptionHandler

package com.example.springboot;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;


@RestControllerAdvice
public class CommonController {
    @ExceptionHandler(Exception.class)
    public String handleException(Exception ex) {
        return ex.getMessage();
    }
}

Hemos agregado una clase que procesa de manera uniforme la información devuelta por el front-end. Incluso si no hay una captura de prueba en el método del controlador comercial, aún puede ser capturada y devuelta por @ExceptionHandler (aquí están todas las excepciones de excepción, que se pueden refinar de acuerdo con los resultados de devolución de diferentes excepciones) tratar).

Combinando objetos Servlet

El ejemplo anterior simplemente devuelve una cadena. Por lo general, en los proyectos, recibimos y devolvemos datos a través del objeto HttpServletRequest y el objeto HttpServletResponse. También podemos agregar los parámetros correspondientes al método de captura de excepciones para garantizar la coherencia con el método de procesamiento empresarial.

package com.example.springboot;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@RestControllerAdvice
public class CommonController {
   
    /**
     * 对各种异常统一返回
     */
    @ExceptionHandler(value = Exception.class)
    public void index(HttpServletRequest request, HttpServletResponse response,Exception ex) {
        //将返回信息写入response
    }
}

@RestControllerAdvice

@RestControllerAdvice es solo una de las funciones para el manejo de excepciones. Los métodos de clases anotados con @RestControllerAdvice se pueden anotar en métodos con @ExceptionHandler, @InitBinder y @ModelAttribute.

@InitBinder puede inicializar el objeto WebDataBinder. Al interactuar con los extremos delantero y trasero, a menudo se encuentra con la conversión de la cadena de fecha en el formulario y el tipo de fecha de JavaBean. Este método puede formatear de manera uniforme la cadena de fecha pasada a través del procesamiento frontal. sin convertir en cada método.

La función principal de @ModelAttribute es agregar datos al objeto modelo.

    @RequestMapping("/hello")
    public String hello(Model model) {

        return model.getAttribute("attributeName").toString();
    }
package com.example.springboot;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@RestControllerAdvice
public class CommonController {

    @ModelAttribute
    public void populateModel(Model model) {
        model.addAttribute("attributeName", "统一返回");
    }


}

 

 

 

Supongo que te gusta

Origin blog.csdn.net/knowwait/article/details/128248133
Recomendado
Clasificación