org.sam.server.http.context.HandlerFinder Maven / Gradle / Ivy
package org.sam.server.http.context;
import org.sam.server.annotation.component.Handler;
import org.sam.server.annotation.handle.PathValue;
import org.sam.server.annotation.handle.RequestMapping;
import org.sam.server.annotation.handle.RestApi;
import org.sam.server.constant.ContentType;
import org.sam.server.constant.HttpMethod;
import org.sam.server.context.BeanContainer;
import org.sam.server.context.HandlerInfo;
import org.sam.server.exception.HandlerNotFoundException;
import org.sam.server.http.web.Request;
import org.sam.server.http.web.Response;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
/**
* 실행할 핸들러를 찾는 클래스입니다.
*
* @author hypernova1
*/
public class HandlerFinder {
private static final Pattern PATH_VALUE_PATTERN = Pattern.compile("[{](.*?)[}]");
private final Request request;
private final Response response;
private final List pathValueHandlerMethods = new ArrayList<>();
private final List handlerMethods = new ArrayList<>();
private String handlerClassPath;
private boolean isExistsPath;
private HandlerFinder(Request request, Response response) {
this.request = request;
this.response = response;
}
/**
* 인스턴스를 생성합니다.
*
* @param request 요청 인스턴스
* @param response 응답 인스턴스
* @return HandlerFinder 인스턴스
* */
public static HandlerFinder of(Request request, Response response) {
return new HandlerFinder(request, response);
}
/**
* 핸들러 클래스를 탐색하여 해당하는 핸들러의 정보를 담은 인스턴스를 생성합니다.
*
* @return 핸들러 정보 인스턴스
* @throws HandlerNotFoundException 홴들러를 찾지 못 했을 시
* @see org.sam.server.context.HandlerInfo
* */
public HandlerInfo createHandlerInfo() throws HandlerNotFoundException {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy