> This page is for SDK, 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. For task-scoped instructions for coding agents working in a Fern project, see https://buildwithfern.com/learn/home/fern-instructions.md.

## 4.37.2

**`(fix):`** Build `core/ObjectMappers.JSON_MAPPER` with `new ObjectMapper().registerModule(...)` instead of
`JsonMapper.builder()`, so generated SDKs run on Jackson 2.9.x (`JsonMapper` was the only
Jackson 2.10+ symbol in the generated code and failed with `NoClassDefFoundError` at runtime).
`ObjectMappers.stringify()` no longer mutates the shared mapper via
`setSerializationInclusion(ALWAYS)` (a no-op: `ALWAYS` is Jackson's default and generated
models declare `@JsonInclude(NON_ABSENT)` at class level), and `parseErrorBody()` catches
`IOException` (the supertype `readValue` declares on 2.9) instead of `JsonProcessingException`.
Mapper configuration and serialized output are unchanged.

## 4.37.1

**`(chore):`** Re-publish the Java SDK generator: the 4.36.0 (`retryOnStatusCodes`) and 4.37.0 (`retryDelays`) images were never
pushed because the publish workflow broke on the new `ubuntu-latest` runner image (JDK 25); this release carries both
features with no further code changes.

## 4.37.0

**`(feat):`** Add `retryDelays(List<Duration>)` to `ClientOptions.Builder` and the generated root client builders (sync, async
and multi-auth stages) for an explicit retry schedule: the n-th retry waits for the n-th duration and the request
stops retrying once the list is exhausted, so the list size replaces `maxRetries` and the exponential backoff
settings. Delays are used as-is (no jitter); `Retry-After` / `X-RateLimit-Reset` headers still take precedence
for that attempt. Default behaviour is unchanged.

## 4.36.0

**`(feat):`** Add `retryOnStatusCodes(Set<Integer>)` to `ClientOptions.Builder` and the generated root client builders
(sync, async and multi-auth stages). It replaces the default set of HTTP status codes that trigger an automatic
retry (408, 429 and 5xx), so a consumer can retry only `429`, or `429` and `503`, and have other 5xx responses
returned as-is. The default is unchanged; `maxRetries`, the backoff settings and Retry-After handling are
unaffected.