All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.hpsocket.soa.starter.web.cloud.advice.CloudSentinelExceptionAdvice Maven / Gradle / Ivy

package io.github.hpsocket.soa.starter.web.cloud.advice;

import java.lang.reflect.UndeclaredThrowableException;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import com.alibaba.csp.sentinel.slots.block.BlockException;

import io.github.hpsocket.soa.framework.web.model.Response;
import io.github.hpsocket.soa.framework.web.support.WebServerHelper;
import io.github.hpsocket.soa.starter.sentinel.advice.SentinelExceptionAdvice;
import io.github.hpsocket.soa.starter.web.cloud.support.TracingHelper;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;

/** Spring Cloud Sentinel 异常拦截器 */
@Slf4j
@RestControllerAdvice
public class CloudSentinelExceptionAdvice extends SentinelExceptionAdvice
{
    /** {@linkplain BlockException} 异常处理器 */
    @Override
    @ResponseStatus(value = HttpStatus.TOO_MANY_REQUESTS)
    @ExceptionHandler({BlockException.class})
    public Response handleBlockException(HttpServletRequest request, HttpServletResponse response, BlockException e)
    {
        if(WebServerHelper.isEntry())
            return super.handleBlockException(request, response, e);
        else
        {
            log.error(e.getMessage());
            return TracingHelper.createExceptionResponse(e, HttpStatus.TOO_MANY_REQUESTS);
        }
    }

    /** {@linkplain UndeclaredThrowableException} 异常处理器 */
    @Override
    @ResponseStatus(value = HttpStatus.SERVICE_UNAVAILABLE)
    @ExceptionHandler({UndeclaredThrowableException.class})
    public Response handleUndeclaredThrowableException(HttpServletRequest request, HttpServletResponse response, UndeclaredThrowableException e)
    {
        if(WebServerHelper.isEntry())
            return super.handleUndeclaredThrowableException(request, response, e);
        else
        {
            log.error(e.getMessage(), e);
            return TracingHelper.createExceptionResponse(e, HttpStatus.SERVICE_UNAVAILABLE);
        }
    }
    
    /** {@linkplain RuntimeException} 异常处理器 */
    @Override
    @ResponseStatus(value = HttpStatus.SERVICE_UNAVAILABLE)
    @ExceptionHandler({RuntimeException.class})
    public Response handleRuntimeException(HttpServletRequest request, HttpServletResponse response, RuntimeException e)
    {
        if(WebServerHelper.isEntry())
            return super.handleRuntimeException(request, response, e);
        else
        {
            log.error(e.getMessage(), e);
            return TracingHelper.createExceptionResponse(e, HttpStatus.SERVICE_UNAVAILABLE);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy