环顾网络上的示例,我猜想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进行通用异常,或者使用codeSolrException(请参阅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()));
    }
}

10-05 23:28