diff --git a/src/main/java/io/vertx/core/eventbus/EventBusOptions.java b/src/main/java/io/vertx/core/eventbus/EventBusOptions.java
--- a/src/main/java/io/vertx/core/eventbus/EventBusOptions.java
+++ b/src/main/java/io/vertx/core/eventbus/EventBusOptions.java
@@ -173,6 +173,10 @@ public EventBusOptions(JsonObject json) {
   public JsonObject toJson() {
     JsonObject json = new JsonObject();
     EventBusOptionsConverter.toJson(this, json);
+    final String clusterPublicPortName = "clusterPublicPort";
+    if (json.containsKey(clusterPublicPortName) && json.getInteger(clusterPublicPortName) == DEFAULT_CLUSTER_PUBLIC_PORT) {
+      json.remove(clusterPublicPortName);
+    }
     return json;
   }
 

diff --git a/src/test/java/io/vertx/core/VertxOptionsTest.java b/src/test/java/io/vertx/core/VertxOptionsTest.java
--- a/src/test/java/io/vertx/core/VertxOptionsTest.java
+++ b/src/test/java/io/vertx/core/VertxOptionsTest.java
@@ -314,6 +314,14 @@ public void testDefaultJsonOptions() {
     assertEquals(def.getBlockedThreadCheckIntervalUnit(), json.getBlockedThreadCheckIntervalUnit());
   }
 
+  @Test
+  public void testDefaultJsonVertxOptions() {
+    VertxOptions vertxOptions1 = new VertxOptions();
+    JsonObject json = vertxOptions1.toJson();
+    VertxOptions vertxOptions2 = new VertxOptions(json);
+    assertEquals(json, vertxOptions2.toJson());
+  }
+
   @Test
   public void testJsonOptions() {
     VertxOptions options = new VertxOptions(new JsonObject());

clusterPublicPort in EventBusOptions should be ignored in toJson() result if it is the default value
### Questions


`-1` is the default value of `clusterPublicPort` in `EventBusOptions`, but setting this default value will fail:

```java

  @Test
  public void testEventBusOptions() {
    VertxOptions vertxOptions1 = new VertxOptions();
    JsonObject json = vertxOptions1.toJson();
    VertxOptions vertxOptions2 = new VertxOptions(json);  //  <== this line leads to exception
    assertEquals(json, vertxOptions2.toJson());
  }
```

The exception is:

```java
java.lang.IllegalArgumentException: clusterPublicPort p must be in range 0 <= p <= 65535
	at io.vertx.core.eventbus.EventBusOptions.setClusterPublicPort(EventBusOptions.java:651)
	at io.vertx.core.eventbus.EventBusOptionsConverter.fromJson(EventBusOptionsConverter.java:55)
	at io.vertx.core.eventbus.EventBusOptions.<init>(EventBusOptions.java:165)
	at io.vertx.core.VertxOptionsConverter.fromJson(VertxOptionsConverter.java:45)
	at io.vertx.core.VertxOptions.<init>(VertxOptions.java:181)
	at io.vertx.core.VertxOptionsTest.testEventBusOptions(VertxOptionsTest.java:321)
```

This does not make sense as we cannot re-construct the VertxOptions using the JsonObject exported from a default VertxOptions instance.

### Version

latest `master` branch

### Do you have a reproducer?

Please refer to https://gist.github.com/gaol/7593cebcb2d1328d4ed50ece5ee1ac70 for more detail.

### Contribution

I will provide PR for the fix
