如何干净地检查HTTP返回代码在服务器端异常代码家族中

Ami*_*wal 1 java httpresponse jersey http-status-codes

我正在使用Drop-wizard jersey客户端,该客户端内部使用apache http客户端,在我的情况下,如果服务器端发生任何错误,即它在5xx Server错误中返回状态代码。

我使用下面的代码检查服务器是否返回5XX代码。

if (response.getStatus() / 100 == 5) {
        // do some work
}
Run Code Online (Sandbox Code Playgroud)

javax.ws.rs.core.Response类中也有类似的代码,从那里复制以下代码:-

            public static Family familyOf(final int statusCode) {
                switch (statusCode / 100) {
                    case 1:
                        return Family.INFORMATIONAL;
                    case 2:
                        return Family.SUCCESSFUL;
                    case 3:
                        return Family.REDIRECTION;
                    case 4:
                        return Family.CLIENT_ERROR;
                    case 5:
                        return Family.SERVER_ERROR;
                    default:
                        return Family.OTHER;
                }
            }
        } 
Run Code Online (Sandbox Code Playgroud)

现在,我的代码在checkstyle和PMD规则中失败。说100和5是一个幻数。

我不想比较每个状态的服务器端异常代码的返回状态代码,是否还有其他更好的方法可以用来检查返回代码是否属于服务器错误家族。

Ami*_*wal 5

找到解决方案:-

使用下面的代码,我们可以检查返回代码是否属于该SERVER_ERROR代码。

response.getStatusInfo().getFamily() == Response.Status.Family.SERVER_ERROR
Run Code Online (Sandbox Code Playgroud)