我目前正在嘗試創建一個Controller以全局處理所有未知的URL。所以我所做的就是創建下面排除Spring MVC控制器的請求映射中的某些路徑
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/**")
public class UnknownUrlController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getError404() {
return "/error404";
}
}
我的目的類似於一個控制器是確保剛剛返回一個字符串默認的servlet「未找到」瀏覽器沒有被引用。由於所有未知的URL都由本控制器處理,因此此策略起作用。
然而,問題是,該控制器還引起了我曾在我的WebMvcConfigurerAdapter配置的所有我的靜態資源(圖片,js和css文件)如下
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler("/img/**").addResourceLocations("/img/");
}
所以不是我的靜態文件服務於瀏覽器,我的錯誤頁面取代了它的位置。雖然後來我明白控制器映射優先於此answer的靜態資源。這就是我想知道如何排除我的資源url映射被這個控制器處理的原因,所以它只會關注陷入未知的URL。
之前這一戰略出發我已經嘗試了一些其他的事情,我不能去上班(我可能失去了一些東西)
- 設置throwExceptionIfNoHandlerFound我的DispatcherServlet的字段設置爲true,使當找不到URL映射的處理程序時應拋出的異常,然後按照here所述的全局處理。然而,似乎默認處理程序總是分配給未知路徑(/ **),因此不會引發異常。
- 創建了一個application.properties文件並設置了spring.mvc.throw-exception-if-no-handler-found = true。
我所有的配置都是基於Java的,沒有任何xml文件,並希望保持這種方式。
Hi Sawo。我也閱讀了該鏈接。如果你看看我說的第一件事,我試過了,這裏的鏈接實際上鍊接到同一篇文章。我實現該技術的問題是,當URL不映射到任何控制器時,Dispatcher Servlet不會引發任何異常。所以沒有可以處理的異常。 – dawuzi
在dispatcherServlet中,你可以設置它應該在404情況下拋出一個異常。下面是控制它的方法:http://docs.spring.io/spring-framework/docs/current/javadoc-api /org/springframework/web/servlet/DispatcherServlet.html#setThrowExceptionIfNoHandlerFound-boolean- – SaWo
Hi Sawo。我也嘗試過,但不是拋出一個異常,而是一直分配給默認的Servlet,它只是向瀏覽器返回「Not Found」 – dawuzi