RequestMapping
编写一个类ControllerHelper,将Controller类中定义处理Requet的方法,与Handler绑定。通过请求路径与请求方法我们能方便找到处理这个请求的Controller类和method。
public class ControllerHelper {
//请求request与处理请求handler映射关系
private static final Map<Request, Handler> RequestMap = new HashMap<>();
static {
ArrayList<Class<?>> controllerClasses = ClassHelper.getControllerClasses();
if (CollectionUtil.isNotEmpty(controllerClasses)) {
initRequestMapp(controllerClasses);
}
}
private static void initRequestMapp(ArrayList<Class<?>> controllerClasses) {
for (Class<?> controllerClass : controllerClasses) {
Method[] methods = controllerClass.getDeclaredMethods();
if (ArrayUtil.isNotEmpty(methods)) {
for (Method method : methods) {
//带有RequestMapping注解的方法
if (method.isAnnotationPresent(RequestMapping.class)) {
RequestMapping rm = method.getAnnotation(RequestMapping.class);
//请求路径与请求方法
Request request = new Request(rm.method(), rm.path());
//对应请求路径与请求方法的Controller和method
Handler handler = new Handler(controllerClass, method);
RequestMap.put(request, handler);
}
}
}
}
}
/**
* 获取handler
*
* @param requestMethod
* @param requestPath
* @return
*/
public static Handler getHandler(String requestMethod, String requestPath) {
Request request = new Request(requestMethod, requestPath);
return RequestMap.get(request);
}
}