2009-12-07 8 views
1

j'ai donc une grande longue chaîne de requête qui peut être soit ...servlets vérification params

// url = z = y & surl & temps = z & codec = A264 & acodec = mp3 & width = 400x100 ou // url = z = y & surl & temps = z & optlevel = w

Im en utilisant request.getQueryString ("url") pour vérifier si a) l'qs est là et b) assurez-vous que ce ne est pas nul. Tout cela mène à un grand ensemble désordonné d'instructions if. Je me demandais simplement s'il y avait une meilleure façon de le faire.

exemple ..

if(request.getParameter("originalURL") != null && 
     request.getParameter("originalURL").equals("") && ................) 

Merci les gars

Répondre

3

Bien sûr, juste refactorisons le code dupliqué dans les méthodes ou utiliser un cadre existant.

exemple de base coup d'envoi du Code refondus:

String field1 = getField(request, "field1", true); 
String field2 = getField(request, "field2", true); 
String field3 = getField(request, "field3", false); 

... 

public static String getField(HttpServletRequest request, String fieldName, boolean required) throws ValidatorException { 
    String fieldValue = request.getParameter(fieldName); 
    if (fieldValue == null || fieldValue.trim().isEmpty()) { 
     if (required) { 
      throw new ValidatorException("Field is required"); 
     } else { 
      fieldValue = null; // Make empty string null so that you don't need to hassle with equals("") afterwards. 
     } 
    } 
    return fieldValue; 
} 

Vous pouvez bien sûr aller plus loin et adopter un cadre MVC existant avec validation des capacités (et de conversion), tels que Sun JSF ou Apache Struts.

+0

Je suis d'accord pour mettre le code dupliqué dans les méthodes. Cependant, je n'aime pas passer des arguments booléens, ils signifient souvent simplement que la méthode fait plus d'une chose et que la méthode devrait être divisée en deux méthodes (par exemple 'getField()' et 'getRequiredField()'). Il s'agit de l'astuce n ° 12 du code propre de Robert C. Martin: Eliminer les arguments booléens (http://www.informit.com/articles/article.aspx?p=1392524). –

+0

Bien sûr, ce n'est qu'un exemple de base. En réalité, je les diviserais en 3 méthodes. La méthode prenant un booléen étant privé. Sinon, il n'y a plus que la duplication de code. – BalusC

+0

@BalusC se demandait ce que vous entendiez par fieldValue = null; // Make empty string null so that you don't need to hassle with equals("") afterwards. wmitchell

0
if("something".equals(request.getParameter("originalURL"))) 

Pas besoin de contrôles nuls, car égaux renvoie toujours false si vous passez une valeur nulle comme atribute

+0

Si vous souhaitez utiliser la valeur, plutôt que de la comparer à des valeurs attendues spécifiques, vous devez effectuer une vérification nulle. – djna

1

cadres tels que JSF et Struts offrent de plus belles abstractions pour traiter les demandes. Quand je travaille avec les API Servlet premières que j'utilise une petite bibliothèque utilitaire pour y faire face, ainsi que l'analyse syntaxique ints et dates etc.

getStringParam(request, "originalUrl") {} 

qui jetterait une exception si l'PARAM est introuvable, ou plus souvent J'utilise un Varient qui fournit une valeur par défaut si le param manque:

getStringParam (request, "origanlUrl", "http://someusefulDefault") {} 

getIntParam(request, "howManyRivers", 93); 
1

Je ne sais pas si vous utilisez un cadre mais, comme mentionné précédemment, la plupart d'entre eux fournissent des classes d'utilité à cette fin. Si vous n'êtes pas, vous devriez peut-être créer une telle classe.

Personnellement, j'aime le ServletRequestUtils de Spring qui expose plusieurs méthodes statiques typées fortes pour obtenir des paramètres de la demande, permettant des valeurs de repli et vérifiant les paramètres requis. Si je devais coder quelque chose d'équivalent (soupir), j'imiterais cette classe.