現在、未知の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";
}
}
次のようなコントローラを作成して私の意図は、単にブラウザに「見つかりません」の文字列が呼び出されなかった返すデフォルトのサーブレットを確保することでした。すべての未知のURLがこのコントローラによって処理されたので、この戦略は機能しました。
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler("/img/**").addResourceLocations("/img/");
}
ので、代わりに私の静的ファイルを次のように問題はコントローラはまた、私のすべての静的リソース(画像、JSとCSSファイル)のために呼び出されたことを、私は私のWebMvcConfigurerAdapterで構成されていたましたがブラウザに表示されると、私のエラーページがその場所で提供されました。私は後でコントローラのマッピングがこのanswerの静的リソースよりも優先されることを理解しましたが。これが私のリソースURLマッピングをこのコントローラによって処理されないようにする方法を知りたいので、未知のURLをトラップすることだけに関係します。ようにtrueに私ののDispatcherServletのthrowExceptionIfNoHandlerFoundフィールドを設定し、私は(私はおそらく何かが足りないのです)私は仕事を得ることができなかったいくつかの他のものを試していたこの戦略を進める前に
- URLマッピング用のハンドラが見つからなかった場合にスローされるべき例外と、hereのようにグローバルに処理する例外。しかし、デフォルトのハンドラは常に不明なパス(/ **)に割り当てられているようで、例外は一度もスローされません。
- はapplication.propertiesファイルを作成し、spring.mvc.throw-exception-if-no-handler-found = trueを設定しました。
私の設定はすべてxmlファイルのないJavaベースであり、そのまま使用することをお勧めします。
こんにちは。私はそのリンクをも読んでいます。試してみた最初のことを見ると、ここのリンクは実際には同じ記事にリンクしています。この手法を実装していた問題は、URLがコントローラにマップされていない場合、Dispatcherサーブレットが例外をスローしないことです。したがって、処理できる例外はスローされません。 – dawuzi
dispatcherServletでは、404の場合に例外をスローするように設定できます。これを制御するメソッドは次のとおりです。http://docs.spring.io/spring-framework/docs/current/javadoc-api /org/springframework/web/servlet/DispatcherServlet.html#setThrowExceptionIfNoHandlerFound-boolean- – SaWo
こんにちは。私もそれを試みましたが、代わりに例外をスローするのではなく、ブラウザに「Not Found」を返すだけのデフォルトサーブレットに割り当て続けました。 – dawuzi