2014-05-23 50 views
0

我正在實現一個Java程序,通過休息與Neo4j圖形數據庫進行交互。對數據庫的每個請求都會產生一個http狀態碼,如200,201,401等。如何在java中爲http狀態碼定義OK或NOT_OK?

對於我的程序來說,一些響應代碼是可以的,比如200,201或202,而很明顯,其他一些響應代碼是不行的,比如401 404等等。

我想要做什麼,而實際上我試圖做的是這樣的:使用狀態代碼(int),狀態文本(如在HttpStatus中)和一個自定義字段的某種形式的OK(響應是對我來說可以)或NOK(對我來說反應不好)。

我的問題是我沒有想法,如何從響應代碼從REST(是int 200)遍歷SC_OK從HttpStatus到確定從我的枚舉。

這顯然是行不通的:

int status = HttpStatus.SC_NO_CONTENT; 
String StatusText = HttpStatus.getStatusText(status); 
String OkOrNotOk = HttpStatusCodes.StatusText.getValue(); 

有人可以給我一個提示?

由於提前,

克里斯

回答

0

這是確定的,如果狀態代碼爲範圍200..299。沒有其他需要。

特別是,狀態文本沒有語義;它只是用於調試。千萬不要根據它改變你的系統行爲。

0

這裏是我的代碼,我用來實現這一目標:

public enum HttpStatusCode { 
     UNKNOWN       (-1              , false), 
     ACCEPTED      (HttpStatus.SC_ACCEPTED       , true),  // 202 
     BAD_GATEWAY      (HttpStatus.SC_BAD_GATEWAY      , false),  // 502 
     BAD_REQUEST      (HttpStatus.SC_BAD_REQUEST      , false),  // 400 
     CONFLICT      (HttpStatus.SC_CONFLICT       , false),  // 409 
     CREATED       (HttpStatus.SC_CREATED       , true),  // 201 
     CONTINUE      (HttpStatus.SC_CONTINUE       , true),  // 100 
     MOVED_TEMPORARILY    (HttpStatus.SC_MOVED_TEMPORARILY    , false),  // 302 
     FORBIDDEN      (HttpStatus.SC_FORBIDDEN      , false),  // 403 
     GATEWAY_TIMEOUT     (HttpStatus.SC_GATEWAY_TIMEOUT     , false),  // 504 
     UNPROCESSABLE_ENTITY   (HttpStatus.SC_UNPROCESSABLE_ENTITY    , false);  // 422 

     private final int value; 
     private final boolean name; 

     private HttpStatusCode(int value, boolean name) { 
      this.value = value; 
      this.name = name; 

     } 

     public boolean isOk() { 
      return name; 
     } 

     public int getErrorCode(){ 
      return value; 
     } 

     public static HttpStatusCode getHttpStatusCode(int errorCode){ 
      for (HttpStatusCode code : HttpStatusCode.values()) { 
       if(code.getErrorCode() == errorCode) 
        return code; 
      } 
      return HttpStatusCode.UNKNOWN; 
     } 
    } 

這個我可以查詢這樣如果返回代碼是確定或不正常:

StringRequestEntity requestEntity = new StringRequestEntity(p.toString(), 
                     "application/json", 
                     "UTF-8"); 

      mPost.setRequestEntity(requestEntity); 
      int status = client.executeMethod(mPost); 
      HttpStatusCode statusCode = HttpStatusCode.getHttpStatusCode(status); 

      // in case everything is fine, neo4j should return 200, 201 or 202. any other case needs to be investigated 
      if (!statusCode.isOk()){ 
       logger.error(HttpErrorMessages.getHttpErrorText(statusCode.getErrorCode())); 
      } 

也許可以幫助一些其他人也