如何在java中为http状态代码定义OK或NOT_OK?

时间:2014-05-23 10:19:23

标签: java http enums

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

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

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

我的问题是我没有想法,如何从REST的响应代码(作为int 200)遍历SC_OK从HttpStatus到我的枚举中的OK。

这显然不起作用:

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

有人能给我一个暗示吗?

提前致谢,

克里斯

2 个答案:

答案 0 :(得分:0)

如果状态代码在200..299范围内,则可以。没有别的需要。

特别是,状态文本没有语义;它只是用于调试。不要根据它改变你的系统行为。

答案 1 :(得分: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()));
            }

也许这对其他人也有帮助