diff --git a/core/mapping/unmarshaler.go b/core/mapping/unmarshaler.go index a633453a..7b6df276 100644 --- a/core/mapping/unmarshaler.go +++ b/core/mapping/unmarshaler.go @@ -253,6 +253,10 @@ func (u *Unmarshaler) processFieldPrimitiveWithJSONNumber(field reflect.StructFi return err } + if err := validateValueInOptions(opts.options(), v); err != nil { + return err + } + if fieldKind == reflect.Ptr { value = value.Elem() } diff --git a/core/mapping/unmarshaler_test.go b/core/mapping/unmarshaler_test.go index da042490..521e574f 100644 --- a/core/mapping/unmarshaler_test.go +++ b/core/mapping/unmarshaler_test.go @@ -1170,6 +1170,20 @@ func TestUnmarshalWithIntOptionsIncorrect(t *testing.T) { assert.NotNil(t, UnmarshalKey(m, &in)) } +func TestUnmarshalWithJsonNumberOptionsIncorrect(t *testing.T) { + type inner struct { + Value string `key:"value,options=first|second"` + Incorrect int `key:"incorrect,options=1|2"` + } + m := map[string]interface{}{ + "value": "first", + "incorrect": json.Number("3"), + } + + var in inner + assert.NotNil(t, UnmarshalKey(m, &in)) +} + func TestUnmarshalWithUintOptionsCorrect(t *testing.T) { type inner struct { Value string `key:"value,options=first|second"`