DESC

내가 보려고 쓰는 블로그

«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Today
-
Yesterday
-
Total
-
  • Spring 전체 URL 가져오기
    JAVA 2020. 5. 12. 10:13
    반응형

    Spring 기반 프로젝트에서 Controller 에 매핑시킨 URL 리스트를 불러오는 예제.

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.method.HandlerMethod;
    import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
    import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
    
    import com.hailey.Url.service.UrlService;
    
    @Controller
    @RequestMapping("/api/Url")
    public class UrlController {
    
      @Autowired
      private UrlService service;
    
      @Qualifier(value = "handlerMapping")
      @Autowired
      private RequestMappingHandlerMapping handlerMapping;
      
      @ResponseBody
      @RequestMapping("/getAllRequestUrl")
      public List<Map<String, Object>> getAllRequestUrl(HttpServletRequest request) {
        List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
        
        // Url 리스트를 Map 형식으로 가져오기 
        Map<RequestMappingInfo, HandlerMethod> handlerMap = handlerMapping.getHandlerMethods();
        Iterator<RequestMappingInfo> it = handlerMap.keySet().iterator();
        
        List<Map<String, Object>> mappingInfoList = new ArrayList<Map<String, Object>>();
        RequestMappingInfo requestMappingInfo = null;
        Set<String> patterns;
        Object[] sArr;
        String url, beanName;
    
        while(it.hasNext()) {
          requestMappingInfo = it.next();
          patterns           = requestMappingInfo.getPatternsCondition().getPatterns();
          if(!patterns.isEmpty()) {
            sArr = patterns.toArray();
            if(sArr.length == 1) {
              // annotaion에 지정된 URL 값 
              url      = (String) sArr[0];
              // URL이 지정되어있는 컨트롤러 이름
              beanName = (String) handlerMap.get(requestMappingInfo).getBean();
    
              Map<String,Object> map = new HashMap<String,Object>();
              map.put("ID", beanName.replace("Controller", ""));
              map.put("URL", url);
              mappingInfoList.add(map);
            }
          }
        }
        
        return mappingInfoList;
      }
      
    }

     

    프로젝트에서 컨트롤러의 이름을 프로그램IDController 라고 지정한다는 가정하에 ID를 지정한다.

    반응형

    'JAVA' 카테고리의 다른 글

    이클립스 속도 개선 eclipse.ini / Preference  (0) 2021.01.08
    Spring 다국어 적용하기  (0) 2020.05.27
    Spring DAO DTO 사용하기  (0) 2020.05.12
    Spring 커스텀 태그 활용  (0) 2020.05.12

    댓글

Customed By Hailey Gong.