diff --git a/pkg/schema/field/object.go b/pkg/schema/field/object.go
index d86aa2352544f68ea837152ec6799677f4624d1a..1f995cceba1816c67454d94771ef3287e86d948c 100644
--- a/pkg/schema/field/object.go
+++ b/pkg/schema/field/object.go
@@ -74,12 +74,18 @@ func (p *ObjectParameters) Merge(parameters Parameters) error {
 	if !ok {
 		return errors.New("invalid object parameters")
 	}
+	if op == nil {
+		return nil
+	}
 	for k, fld := range op.Fields {
 		if f, ok := p.Fields[k]; ok {
 			if err := f.Merge(fld); err != nil {
 				return err
 			}
 		} else {
+			if p.Fields == nil {
+				p.Fields = make(map[string]*Field)
+			}
 			p.Fields[k] = fld
 		}
 	}
diff --git a/pkg/schema/field/object_test.go b/pkg/schema/field/object_test.go
index a85d4488c74997f2e665489fb86a870a64aa96c0..cf4d773bedc4c02694e425602f918131ee5a2655 100644
--- a/pkg/schema/field/object_test.go
+++ b/pkg/schema/field/object_test.go
@@ -231,3 +231,59 @@ func TestFieldNameValidate(t *testing.T) {
 		})
 	}
 }
+
+func TestObjectParameters_Merge(t *testing.T) {
+	tests := []struct {
+		name    string
+		l, r    *ObjectParameters
+		wantErr assert.ErrorAssertionFunc
+		want    *ObjectParameters
+	}{
+		{
+			name:    "right is nil",
+			l:       &ObjectParameters{},
+			r:       nil,
+			wantErr: assert.NoError,
+			want:    &ObjectParameters{},
+		},
+		{
+			name:    "right has nil Fields map",
+			l:       objectType.NewParameters().(*ObjectParameters),
+			r:       &ObjectParameters{Fields: nil},
+			wantErr: assert.NoError,
+			want:    &ObjectParameters{},
+		},
+		{
+			name:    "left + right is empty object",
+			l:       objectType.NewParameters().(*ObjectParameters),
+			r:       objectType.NewParameters().(*ObjectParameters),
+			wantErr: assert.NoError,
+			want:    &ObjectParameters{},
+		},
+		{
+			name:    "left + right with data",
+			l:       &ObjectParameters{Fields: map[string]*Field{"a": {Title: "Text1", Description: "test description"}}},
+			r:       &ObjectParameters{Fields: map[string]*Field{"b": {Title: "Text2", Description: "test description"}}},
+			wantErr: assert.NoError,
+			want: &ObjectParameters{Fields: map[string]*Field{
+				"a": {Title: "Text1", Description: "test description"},
+				"b": {Title: "Text2", Description: "test description"},
+			}},
+		},
+		{
+			name:    "left empty + right with data",
+			l:       &ObjectParameters{},
+			r:       &ObjectParameters{Fields: map[string]*Field{"b": {Title: "Text2", Description: "test description"}}},
+			wantErr: assert.NoError,
+			want: &ObjectParameters{Fields: map[string]*Field{
+				"b": {Title: "Text2", Description: "test description"},
+			}},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			tt.wantErr(t, tt.l.Merge(tt.r), fmt.Sprintf("Merge(%v)", tt.l))
+			assert.Equal(t, tt.l, tt.want)
+		})
+	}
+}