Como llegar de error específico en lugar de un error interno del servidor?

Mansingh Patel:

Estoy recibiendo un error interno del servidor de cartero a pesar de que estoy lanzando una excepción personalizada excepción de mi código. Quiero ver la excepción de que tiene un mensaje de error válido y el código de error, lo que estoy tirando. Será de gran ayuda si alguien de ustedes me puede ayudar en este punto. Por ejemplo, cómo puedo conseguir un mejor mensaje de error. Adición a continuación a presión código. Gracias por adelantado.

@Service
public class FetchActionImpl implements FetchAction {

    private static Logger log = LoggerFactory.getLogger(FetchActionImpl.class);

    @Autowired
    FetchActionServiceImpl fetchActionService;// = new FetchActionServiceImpl();

    @Override
    public FetchResponse fetchActionRequest(String caseId) throws BBWException,Exception{
        //String resp ="";
        log.info("fetchaction Request: {}",ApplicationConstants.LOG_ENTRY_MESSAGE);
        log.info("The caseId received from BRASS:\n {}",caseId);
        FetchResponse resp = null;
        try{
            if(true) {
                throw new BBWException("500","Test");
                }
            resp = fetchActionService.fetchIt(caseId);

            log.debug("fetchaction Response: {}",resp.toString());

        } 
        catch (BBWException be) {
            throw be;
        }
        catch (Exception e) {
            throw new BBWException("500",e.getMessage());
        }
        return resp;
        }

}


@Api
@Path("/fetch_service")
public interface FetchAction {

    @GET
    @Path("/fetchaction/caseid/{caseid}")
    @Produces({MediaType.APPLICATION_JSON})
    //@Consumes({MediaType.TEXT_XML})
    @ApiOperation(
            value = "Respond BRASS Request",
            notes = "Returns a XML object "                 
    )
    @ApiResponses(
            value = {
                    @ApiResponse(code = 404, message = "Service not available"),
                    @ApiResponse(code = 500, message = "Unexpected Runtime error")
                    })
    public FetchResponse fetchActionRequest(@PathParam("caseid") String caseid) throws BBWException, Exception;

}`

    public class BBWException extends Exception {

            private static final long serialVersionUID = -7987978270260338068L;

            private String errorCode;
            private String errorMessage;

            public BBWException(String errorCode, String errorMessage) {
                super(errorMessage);
                this.errorCode = errorCode;
                this.errorMessage = errorMessage;
            }

            public String getErrorCode() {
                return errorCode;
            }


            public void setErrorCode(String errorCode) {
                this.errorCode = errorCode;
            }


            public String getErrorMessage() {
                return errorMessage;
            }
        public void setErrorMessage(String errorMessage) {
            this.errorMessage = errorMessage;
        }

        @Override
        public String toString() {

            return (this.errorCode + " " + this.errorMessage);
        }
}
Pijotrek:

Cada vez que el (no detectada) excepción es tirar, devoluciones SpringBoot Http-500 Internal Server Error. Hay muchas maneras de manejar excepciones en la primavera.

Digamos que tengo a mi mando y yo implícitamente una excepción.

@RestController
public class HelloWorldController {

    @GetMapping("/hello-world")
    public String helloWorld() {
        throw new MyCustomException("I just can't say hello!");
    }
}

Es el mismo que el suyo - se puede especificar nada en la excepción.

Primero:

Una de las formas de manejarlo, es crear una clase con @ControllerAdviceanotación.

@ControllerAdvice
public class GlobalExceptionHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(MyCustomException.class)
    public ResponseEntity<String> handlyMyCustomException(MyCustomException e) {
        logger.error("error occurred {}", e);
        return new ResponseEntity<>("Something happened: " + e.getMessage(), HttpStatus.I_AM_A_TEAPOT);
    }
}

De esta manera usted es capaz de detectar la excepción de su elección (a nivel mundial) y devolver el mensaje con el estado de respuesta HTTP de su elección, no necesariamente siempre I_AM_A_TEAPOT

Segundo:

    @ExceptionHandler(MyCustomException.class)
        public ResponseEntity<String> handlyMyCustomException(MyCustomException e) {
            logger.error("error occurred {}", e);
            return new ResponseEntity<>("Something happened: " + e.getMessage(), HttpStatus.I_AM_A_TEAPOT);
        }

También podría crear único método anotado con @ExceptionHandleren su clase del controlador - pero esto no es global y se va a trabajar sólo para este controlador de llamadas exactas.

Como resultado a continuación:

Eso es el resultado

Tercero:

Otra forma de tratar las excepciones es crear sus propios errores .htmlarchivos. Si coloca un archivo en el resources/static/error/500.htmlque debe ser devuelto cuando el Http-500 Internal Server Errorse lanza.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=232531&siteId=1
Recomendado
Clasificación