环顾网络上的示例,我猜想getStatus()成功返回零,并且大多数失败将显示为异常,而不是非零错误代码。
真的吗?当getStatus()返回非零时抛出错误是否安全/正确? getStatus()可能返回哪些非零值,这些值表示什么?
最佳答案
我不确定,如果您希望在solrj中看到一个完全非零的代码,因为对于每个非正常状态代码,在org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpRequestBase, ResponseParser):491
中都会抛出SolrException(sorlj 5.3.0)。
可能的值是(根据this和Solr 1.x)在org.apache.solr.core.SolrCore
中设置的(在postDecorateResponse
中,Solr 5.2.1以前是Method setResponseHeaderValues
),它会使用500
进行通用异常,或者使用code
的SolrException
(请参阅Enum SolrException.ErrorCode
):
400 - BAD_REQUEST
401 - UNAUTHORIZED
403 - FORBIDDEN
404 - NOT_FOUND
409 - CONFLICT
415 - UNSUPPORTED_MEDIA_TYPE
500 - SERVER_ERROR
503 - SERVICE_UNAVAILABLE
510 - INVALID_STATE
0 - UNKNOWN
我最终将每个响应传递给check-Method,这将引发Exception:
private void checkResponse(SolrResponseBase response){
if(response.getStatus() != 0){
throw new RuntimeException(String.format("Solr-Response has error code %s",response.getStatus()));
}
}