我正在实现一个通过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();
有人能给我一个暗示吗?
提前致谢,
克里斯
答案 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()));
}
也许这对其他人也有帮助