docs: public CompleteMultipartUploadResponse completeMultipartUpload(CompleteMultipartUploadRequest request) {
          checkNotNull(request, "request should not be null.");
  
          InternalRequest internalRequest = this.createRequest(request, HttpMethodName.POST);
          internalRequest.addParameter("uploadId", request.getUploadId());
  
          ObjectMetadata metadata = request.getObjectMetadata();
          if (metadata != null) {
              populateRequestMetadata(internalRequest, metadata);
          }
  
          byte[] json = null;
          List<PartETag> partETags = request.getPartETags();
          StringWriter writer = new StringWriter();
          try {
              JsonGenerator jsonGenerator = JsonUtils.jsonGeneratorOf(writer);
              jsonGenerator.writeStartObject();
              jsonGenerator.writeArrayFieldStart("parts");
              for (PartETag partETag : partETags) {
                  jsonGenerator.writeStartObject();
                  jsonGenerator.writeNumberField("partNumber", partETag.getPartNumber());
                  jsonGenerator.writeStringField("eTag", partETag.getETag());
                  jsonGenerator.writeEndObject();
              }
              jsonGenerator.writeEndArray();
              jsonGenerator.writeEndObject();
              jsonGenerator.close();
          } catch (IOException e) {
              throw new BceClientException("Fail to generate json", e);
          }
          try {
              json = writer.toString().getBytes(DEFAULT_ENCODING);
          } catch (UnsupportedEncodingException e) {
              throw new BceClientException("Fail to get UTF-8 bytes", e);
          }
  
          internalRequest.addHeader(Headers.CONTENT_LENGTH, String.valueOf(json.length));
          internalRequest.addHeader(Headers.CONTENT_TYPE, "application/json");
          internalRequest.setContent(RestartableInputStream.wrap(json));
  
          CompleteMultipartUploadResponse response =
                  this.invokeHttpClient(internalRequest, CompleteMultipartUploadResponse.class);
          response.setBucketName(request.getBucketName());
          return response;
      }