2015-03-06 18 views
6

Tôi muốn trả lại lỗi 404 tùy chỉnh bằng SpringBoot, nhưng tôi muốn có thể thêm một số logic phía máy chủ vào nó, không chỉ phục vụ một trang tĩnh.Làm cách nào để tạo bộ điều khiển 404 bằng Spring Boot?

1. Tôi tắt trang Nhãn trắng mặc định trong application.properties

error.whitelabel.enabled=false

2. Tôi đã thêm một error.html Thymeleaf dưới resources/templates

này hoạt động bằng cách này. Trang được phân phát, nhưng không có trình điều khiển nào được gọi.

3. Tôi tạo ra một lớp Error là "điều khiển"

package com.noxgroup.nitro.pages; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.ExceptionHandler; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
@RequestMapping("/error") 
public class Error { 

    @ExceptionHandler 
    public String index() { 
     System.out.println("Returning Error"); 
     return "index"; 
    } 

} 

Thật không may, tôi không nhìn thấy Returning Error in bất cứ nơi nào trong giao diện điều khiển.

Tôi đang sử dụng Tomcat được nhúng với Khởi động mùa xuân. Tôi đã nhìn thấy các tùy chọn khác nhau, không có trong đó có vẻ làm việc bao gồm cả việc sử dụng @ControllerAdvice, loại bỏ các RequestMapping, vv Không làm việc cho tôi.

Trả lời

17

Vùng chứa servlet sẽ nhận 404 trước khi có thể truy cập Spring, vì vậy bạn cần xác định trang lỗi ở cấp vùng chứa servlet, chuyển tiếp tới bộ điều khiển tùy chỉnh của bạn.

@Component 
public class CustomizationBean implements EmbeddedServletContainerCustomizer { 

    @Override 
    public void customize(ConfigurableEmbeddedServletContainer container) { 
    container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error")); 
    } 

} 
3

Cách dễ nhất tôi tìm thấy là triển khai ErrorController.

@Controller 
public class RedirectUnknownUrls implements ErrorController { 

    @GetMapping("/error") 
    public void redirectNonExistentUrlsToHome(HttpServletResponse response) throws IOException { 
     response.sendRedirect("/"); 
    } 

    @Override 
    public String getErrorPath() { 
     return "/error"; 
    } 
} 
Các vấn đề liên quan