Skip to content

Commit e59e3a8

Browse files
clarify how encoding works for deserialization too (#5422)
..and be more specific about what an "array property" and "array schema" are
1 parent b5ab7d0 commit e59e3a8

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

src/oas.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1375,11 +1375,13 @@ Each field has its own set of media types with which it can be used; for all oth
13751375
The behavior of the `encoding` field is designed to support web forms, and is therefore only defined for media types structured as name-value pairs that allow repeat values, most notably `application/x-www-form-urlencoded` and `multipart/form-data`.
13761376

13771377
To use the `encoding` field, each key under the field MUST exist in the data instance as a property; `encoding` entries with no corresponding property SHALL be ignored.
1378-
Array properties MUST be handled by applying the given Encoding Object to produce one encoded value per array item, each with the same `name`, as is recommended by [[!RFC7578]] [Section 4.3](https://www.rfc-editor.org/rfc/rfc7578.html#section-4.3) for supplying multiple values per form field.
1379-
For all other value types for both top-level non-array properties and for values, including array values, within a top-level array, the Encoding Object MUST be applied to the entire value.
1378+
When serializing, property values of the array type MUST be handled by applying the given Encoding Object to produce one encoded value per array item, each with the same `name`, as is recommended by [[!RFC7578]] [Section 4.3](https://www.rfc-editor.org/rfc/rfc7578.html#section-4.3) for supplying multiple values per form field; when deserializing, the Encoding object is applied to each item of the array property of the same name.
1379+
For deserialization to an object, multiple values with the same `name` MUST be collapsed into an array value for that named property, with one item per value, in order.
1380+
For all other value types for both top-level non-array property values and for other values, including items of the array type within a top-level array, the Encoding Object MUST be applied to the entire value.
1381+
13801382
The order of these name-value pairs in the target media type is implementation-defined when not explicitly defined by that media-type's specification.
13811383

1382-
For `application/x-www-form-urlencoded`, the `encoding` keys MUST map to parameter names, with the values produced according to the rules of the [Encoding Object](#encoding-object).
1384+
For `application/x-www-form-urlencoded`, the `encoding` keys MUST map to parameter names, with the serialized values produced according to the rules of the [Encoding Object](#encoding-object).
13831385
See [Encoding the `x-www-form-urlencoded` Media Type](#encoding-the-x-www-form-urlencoded-media-type) for guidance and examples, both with and without the `encoding` field.
13841386

13851387
For `multipart` types that decode to an object, such as `multipart/form-data`, the `encoding` keys MUST map to the [`name` parameter](https://www.rfc-editor.org/rfc/rfc7578#section-4.2) of the `Content-Disposition: form-data` header of each part, as is defined for `multipart/form-data` in [[!RFC7578]].
@@ -1926,11 +1928,19 @@ requestBody:
19261928
schema:
19271929
type: object
19281930
properties:
1929-
# No Encoding Object, so use default `text/plain`
1931+
# No Encoding Object for this property, so use string default `text/plain`
19301932
id:
19311933
type: string
19321934
format: uuid
19331935

1936+
# An Encoding object allows multiple values to be provided for this
1937+
# property, without any attempt to decode the array as application/json
1938+
alias:
1939+
type: [ string, array ]
1940+
pattern: '^[A-Z][a-z]*$'
1941+
items:
1942+
pattern: '^[A-Z][a-z]*$'
1943+
19341944
# Encoding Object overrides the default `application/json` content type
19351945
# for each item in the array with `application/xml; charset=utf-8`
19361946
addresses:
@@ -1944,6 +1954,8 @@ requestBody:
19441954
profileImage: {}
19451955

19461956
encoding:
1957+
alias:
1958+
contentType: text/plain
19471959
addresses:
19481960
contentType: application/xml; charset=utf-8
19491961
profileImage:

0 commit comments

Comments
 (0)