【问题标题】:how to define OK or NOT_OK for http status codes in java?如何在java中为http状态码定义OK或NOT_OK?
【发布时间】:2014-05-23 10:19:22
【问题描述】:

我正在实现一个通过 rest 与 Neo4j graph db 接口的 java 程序。对数据库的每个请求都会产生一个 http 状态码,例如 200、201、401 等。

对于我的程序,一些响应代码是可以的,比如 200、201 或 202,而很明显,其他一些代码是不行的,比如 401 404 等。

我想要做的,实际上正在尝试做的是:使用某种带有状态代码 (int) 的枚举、状态文本(如在 HttpStatus 中)和一个带有 OK 的自定义字段(响应是好的对我来说)或 NOK(对我来说反应不好)。

我的问题是我不知道如何从 REST(即 int 200)的响应代码通过 SC_OK 从 HttpStatus 遍历到我的枚举中的 OK。

这显然行不通:

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

谁能给我一个提示?

提前致谢,

克里斯

【问题讨论】:

    标签: java http enums


    【解决方案1】:

    状态码在 200..299 范围内即可。不需要其他任何东西。

    特别是状态文本没有语义;它只是为了调试。永远不要基于它改变你的系统行为。

    【讨论】:

      【解决方案2】:

      这是我用来实现此目的的代码:

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

      也许这对其他人也有帮助

      【讨论】:

        猜你喜欢
        • 2015-09-10
        • 2010-11-09
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        相关资源
        最近更新 更多