2017-03-16 11 views
0

나는 다음과 같은 3 개 유효한 매개 변수로 URL을 취하는 휴식 끝 지점이 유효하지 않습니다. 나는 내가 다른 if 문을 많이 사용하고 있다는 사실처럼 해달라고이나머지 검색 매개 변수 검증

if (!StringUtils.isEmpty(criteria.getRegno())) { 
if ((!StringUtils.isEmpty(criteria.getHostid()) || !StringUtils.isEmpty(criteria.getDomId())) && !StringUtils.isEmpty(criteria.getLocation())) { 
criteria.setSearchType(GET_HOST_SEARCH_TYPE); 
} else if (!StringUtils.isEmpty(criteria.getProvider()) && (StringUtils.isEmpty(criteria.getLocation()) && StringUtils.isEmpty(criteria.getHostid) && StringUtils.isEmpty(criteria.getDomId()))) { 
criteria.setSearchType(GET_PROVIDER_SEARCH_TYPE); 
} else { 
throw new BadRequestException("Either Provider, Location, Hostid or domid is missing"); 
} 
} else { 
throw new BadRequestException("Regno is missing"); 
} 

을 확인하는 검증 방법이있다. 이 일을 더 잘 읽을 수있는 방법이 있다면 언제든지 도와주십시오.

+0

매개 변수 –

+0

로컬 호스트/검색 위치 = 인도 및 레뇨 = 12532 & 호스트 ID = GDY-101 유효 전체 URL 문자열의 샘플을 제공 – Raskill

답변

1

다음과 같은 방법을 시도 할 수 있습니다, 그것은 당신이이 방법에 URL 문자열을 전달해야

public String detectSearchType(String url) throws BadRequestException{ 
     final String condition1 = "(?=.*location)(?=.*(?:hostid|domid))"; 
     final String condition2 = "(?=.*provider)(?!.*hostid)(?!.*domid)(?!.*location)"; 

     if(!url.contains("regno=")) 
      throw new BadRequestException("Regno is missing"); 
     else if(Pattern.compile(condition1).matcher(url).find()) 
      return "GET_HOST_SEARCH_TYPE"; 
     else if(Pattern.compile(condition2).matcher(url).find()) 
      return "GET_PROVIDER_SEARCH_TYPE"; 
     else 
      throw new BadRequestException("Either Provider, Location, Hostid or domid is missing"); 

    } 

.. 크게 다른 경우의 필요성을 줄일 수 있습니다. 같은 다음 :

detectSearchType("localhost/search?location=india&regno=12532&hostid=gdy-101"); 
detectSearchType("localhost/search?location=india&regno=12532&domid=gdy-101"); 
detectSearchType("localhost/search?regno=12532&provider=mrt"); 
detectSearchType("localhost/search?regno=12532&provider=mrt&host=abul"); 
detectSearchType("localhost/abc?regno=1&hostid=2");