Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免捕获异常后返回null?_Java_Rest_Exception_Nullpointerexception_Httpclient - Fatal编程技术网

Java 如何避免捕获异常后返回null?

Java 如何避免捕获异常后返回null?,java,rest,exception,nullpointerexception,httpclient,Java,Rest,Exception,Nullpointerexception,Httpclient,我正在使用Java中的HttpClient库编写一个REST客户端 我编写此方法是为了发布对象: public HttpResponse post(URIBuilder uri, Object body) { HttpPost request = new HttpPost(setBaseProps(uri)); request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8"); H

我正在使用Java中的HttpClient库编写一个REST客户端

我编写此方法是为了发布对象:

public HttpResponse post(URIBuilder uri, Object body) {
    HttpPost request = new HttpPost(setBaseProps(uri));
    request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8");

    HttpResponse response = null;
    try {
        StringEntity bodyToPost = new StringEntity(g.toJson(body));
        request.setEntity(bodyToPost);

        log.info("Perform POST request to: " + request.getURI().toString());
        response = client.execute(request);
    } catch (UnsupportedEncodingException e) {
        log.error("The Character Encoding is not supported!");
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        log.error("HTTP protocol error!");
        e.printStackTrace();
    } catch (IOException e) {
        log.error("Some problems occur or the connection was aborted!");
        e.printStackTrace();
    }

    return response;
}

private URI setBaseProps(URIBuilder uri) {
    URI built = null;

    uri.setScheme(props.protocol())
            .setHost(props.host())
            .setPort(props.port());
    try {
        built = uri.build();
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }

    return built;
}
所有方法在方法签名中抛出已检查的异常。如果这些异常中的一些将被缓存,那么HttpResponse将是
null
,它可以在服务上产生
NullPointerException

如何避免这种情况

将响应包装为可选并在服务中检查是否合适


谢谢

将响应对象从一个类传递到另一个类不是一个好主意,最好构建一个DTO并将其返回给调用类

如果需要返回响应对象,则可以:

  • 向调用此方法的服务抛出异常(您自己的异常或http客户端异常),并在其中处理异常
  • 构建一个空响应对象,设置响应的状态,并让调用此方法的服务处理该状态

    • 将响应对象从一个类传递到另一个类不是一个好主意,最好构建一个DTO并将其返回给调用类

      如果需要返回响应对象,则可以:

      • 向调用此方法的服务抛出异常(您自己的异常或http客户端异常),并在其中处理异常
      • 构建一个空响应对象,设置响应的状态,并让调用此方法的服务处理该状态

      返回HTTP 4xx或5xx错误响应,具体取决于错误是什么,返回HTTP 4xx或5xx错误响应,根据错误是什么而不是空响应,错误响应在此上下文中以及在HTTPResponse上使用正确的HTTP代码集可能更有意义。与空响应不同,错误响应在此上下文中以及在HTTPResponse上使用正确的HTTP代码集可能更有意义。