Spring MVC 在Sping Boot Web上工作时的自定义例外

niwlg2el  于 2022-11-14  发布在  Spring
关注(0)|答案(1)|浏览(104)

我有一个正在实现ErrorController的控制器
它处理我的Spring项目中发生的任何错误,下面是代码。

@Controller
public class CustomErrorController implements ErrorController {
    @RequestMapping("/error")
    public void springWebErrors() {
       return "springWebErrorPage"
    }
}

我还提到

server.error.path=/error

但有时数据可能不符合需求,我会遇到一些问题,因此我希望给予自定义消息,
有没有什么想法如何实现它?(谢谢)

nwlls2ji

nwlls2ji1#

据我所知你担心的是
您希望应用程序在用户发送无效数据时处理错误/异常,我已经使用自定义异常,ControllerAdvice和异常处理程序在代码中应用了相同功能:
请检查下面的代码,这可能是有用的。

@ControllerAdvice
public class ExceptionController {

    @ExceptionHandler(value = PageNotFoundException.class)
    public String pageNotFoundException(PageNotFoundException exception){
        return "error/404";
    }

    @ExceptionHandler(value = AuthFailedException.class)
    public String authFailedException(AuthFailedException exception){
        return "error/401";
    }

    @ExceptionHandler(value = ServerException.class)
    public String serverException(ServerException exception){
        return "error/500";
    }
}

说明:@ControllerAdvice & @ExceptionHandler是全局错误控制器,您可以访问documentation here

@Controller
public class CustomizedErrorController implements ErrorController {
    @RequestMapping("/error")
    public void handleError(HttpServletRequest request) {
        Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
        if (status != null) {
            int statusCode = Integer.parseInt(status.toString());
            if(statusCode == HttpStatus.NOT_FOUND.value()) {
                throw new PageNotFoundException();
            }
            else if(statusCode == HttpStatus.UNAUTHORIZED.value()) {
                throw new AuthFailedException();
            }
            else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                throw new ServerException();
            }
        }
        else{
            throw new OtherException();
        }
    }
}

您还可以从实现或控制器文件中抛出自定义异常。
我希望这能帮上忙

相关问题