Как перенаправить на страницу ошибки при запросе недопустимого или неизвестного URL-адреса при отображении загрузки Spring

#spring #spring-boot #spring-mvc

#spring #spring-boot #spring-mvc

Вопрос:

Как отобразить пользовательские страницы ошибок (JSP) при запросе недопустимого или неизвестного URL-адреса в spring boot. Может ли кто-нибудь помочь мне либо в spring boot, либо в spring MVC (конфигурация Java). Пример: страница с ошибкой должна отображаться, если я запрашиваю /homee вместо /home .

Ответ №1:

Вы должны реализовать контроллер следующим образом:

 @Controller
public class CustomErrorController extends BasicErrorController {

    public CustomErrorController(ServerProperties serverProperties) {
        super(new DefaultErrorAttributes(), serverProperties.getError());
    }

    @Override
    public ResponseEntity error(HttpServletRequest request) {
        HttpStatus status = getStatus(request);
        if (status.equals(HttpStatus.INTERNAL_SERVER_ERROR)){
            return ResponseEntity.status(status).body(ResponseBean.SERVER_ERROR);
        }else if (status.equals(HttpStatus.BAD_REQUEST)){
            return ResponseEntity.status(status).body(ResponseBean.BAD_REQUEST);
        }
        return super.error(request);
    }
}
 

Ответ №2:

Решение таково

 @Controller
public class CustomErrorPage implements ErrorController{
    @RequestMapping("/customError")
    public String handleError(HttpServletRequest request) {
        Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

        if (status != null) {
            Integer statusCode = Integer.valueOf(status.toString());

            if(statusCode == HttpStatus.NOT_FOUND.value()) {
                return "error";
            }
            else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                return "error";
            }
        }
        return "error";
    }
    @Override
    public String getErrorPath() {
        return null;
    }
}
 

укажите server.error.path=/customError в application.properties .Альтернативой application.properties является

 import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.ErrorPageRegistrar;
import org.springframework.boot.web.server.ErrorPageRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;

@Configuration
public class CustomErrorPageRegistrar {
    @Bean
    public ErrorPageRegistrar errorPageRegistrar() {
        return new ErrorPageRegistrar() {
            public void registerErrorPages(ErrorPageRegistry registry) {
                System.out.println("custom error page registered");
                registry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/customError"));
            }
        };
    }
}