2017-03-16 3 views
0

Ich habe einen Rest Endpunkt, die URLs mit den folgenden drei Parameter als gültig nimmt: regno, Host-ID, Standort regno, domid, Standort regno, AnbieterRuhesuchparameter Validation

Alles andere als diese Kombinationen sind ungültig. ich ein Validator Methode haben, die diese

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"); 
} 

Ich mag die Tatsache nicht überprüft, dass ich eine Menge, wenn sonst Aussagen verwende. Wenn es eine besser lesbare Möglichkeit gibt, zögern Sie nicht, zu helfen.

+0

mit Parametern –

+0

localhost/Suchort = india & regno = 12532 & hostid = gdy-101 eine Probe gültigen vollständigen URL-String geben – Raskill

Antwort

1

Sie können den folgenden Ansatz versuchen, wird es die Notwendigkeit zu reduzieren, wenn sonst drastisch ..

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"); 

    } 

Sie müssen die URL-Strings auf diese Methode zu übergeben. wie die folgenden:

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");