> This page is for SDKs, version Legacy.
> For other versions, use one of these documentation indexes:
> - Current (default): https://buildwithfern.com/learn/sdks/current/llms.txt
> - Legacy: https://buildwithfern.com/learn/sdks/legacy/llms.txt

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

## 4.2.1

**`(fix):`** Propagate the `as: "request"` context through discriminated and undiscriminated
union type conversion in the dynamic snippets generator. Literal-typed properties
(e.g., `method: literal<"card">`) are now correctly filtered from builder calls
inside union variants, matching the Java SDK builder which excludes literal
properties from setters. Fixes `cannot find symbol` compilation errors in
generated wire tests for types with literal discriminant fields.

**`(fix):`** Fix undiscriminated union deserialization for `String | int` (and similar)
unions. Previously, `convertValue(Integer, String.class)` would silently coerce
integers to strings, causing the String variant to always win. Primitive
`instanceof` checks now run before `convertValue` branches so exact type matches
take precedence over lossy coercion.

**`(fix):`** Fix wire test response assertions for several round-trip serialization quirks:
(1) allow explicit null fields in expected JSON to match missing fields in actual
(Jackson's `@JsonInclude(NON_ABSENT)` drops `Optional.empty()`); (2) normalize
timezone-less ISO 8601 datetimes in expected JSON to include the `Z` suffix
that Jackson adds on re-serialization. Unified the two recursive JSON
normalization passes into a single tree walk.