Spring や TERASOLUNA で Controllerクラス に @RequestMapping を設定してみたものの、いざURLにアクセスすると404エラー・・・
Controllerクラス に設定したURLをSpringが認識しているのかどうか確認したいが、簡単には確認する方法はなさそうでした。
なので、方法を考えました。
SpringでリクエストURLにマッピングされているControllerを選定しているのはHandlerMapping
で、HandlerMapping
として利用されているのがRequestMappingHandlerMapping
ということなのでこれを利用してマッピングしているリクエストURLを取得してみよう。
で、こうなりました。
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
@Controller
public class HelloController {
private final RequestMappingHandlerMapping handlerMapping;
public HelloController(RequestMappingHandlerMapping handlerMapping) {
this.handlerMapping = handlerMapping;
System.out.println("======= url mapping");
Map<RequestMappingInfo, HandlerMethod> handlerMethodMap = this.handlerMapping.getHandlerMethods();
for( Map.Entry<RequestMappingInfo, HandlerMethod> mapItem : handlerMethodMap.entrySet() ) {
RequestMappingInfo key = mapItem.getKey();
HandlerMethod value = mapItem.getValue();
System.out.println("======= " + key.getPatternsCondition() + " :: " + value);
}
}
}
Springが読込むとこ(component-scan の指定箇所)に置くとサーバ起動時に リクエストURL とそれに紐付いているクラス、メソッドが出力されます。
表示されない場合は、component-scan の設定が間違っているか、サンプルが間違っているか・・・