diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go index 0138ed2f769..82ab3d277b2 100644 --- a/runtime/fieldmask.go +++ b/runtime/fieldmask.go @@ -53,7 +53,7 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field } if isDynamicProtoMessage(fd.Message()) { - for _, p := range buildPathsBlindly(k, v) { + for _, p := range buildPathsBlindly(string(fd.FullName().Name()), v) { newPath := p if item.path != "" { newPath = item.path + "." + newPath diff --git a/runtime/fieldmask_test.go b/runtime/fieldmask_test.go index e458211a48e..fe3f0957968 100644 --- a/runtime/fieldmask_test.go +++ b/runtime/fieldmask_test.go @@ -60,6 +60,12 @@ func TestFieldMaskFromRequestBody(t *testing.T) { input: `{"struct_field": {"name":{"first": "bob"}, "amount": 2}}`, expected: newFieldMask("struct_field.name.first", "struct_field.amount"), }, + { + name: "NonStandardMessageWithJSONNamesForStruct", + msg: &examplepb.NonStandardMessage{}, + input: `{"lineNum": 123, "structField": {"name":"bob"}}`, + expected: newFieldMask("line_num", "struct_field.name"), + }, { name: "value", msg: &examplepb.NonStandardMessage{},