@Override
    public WebClientRequestPreparation requestOptions(RequestOptions requestOptions) {
        requireNonNull(requestOptions, "requestOptions");

        final long maxResponseLength = requestOptions.maxResponseLength();
        if (maxResponseLength >= 0) {
            maxResponseLength(maxResponseLength);
        }

        final Long delayMillis = requestOptions.requestAutoAbortDelayMillis();
        if (delayMillis != null) {
            requestAutoAbortDelayMillis(delayMillis);
        }

        final long responseTimeoutMillis = requestOptions.responseTimeoutMillis();
        if (responseTimeoutMillis >= 0) {
            responseTimeoutMillis(responseTimeoutMillis);
        }

        final long writeTimeoutMillis = requestOptions.writeTimeoutMillis();
        if (writeTimeoutMillis >= 0) {
            writeTimeoutMillis(writeTimeoutMillis);
        }

        final Map<AttributeKey<?>, Object> attrs = requestOptions.attrs();
        if (!attrs.isEmpty()) {
            //noinspection unchecked
            attrs.forEach((key, value) -> attr((AttributeKey<Object>) key, value));
        }
        final ExchangeType exchangeType = requestOptions.exchangeType();
        if (exchangeType != null) {
            exchangeType(exchangeType);
        }

        final ResponseTimeoutMode responseTimeoutMode = requestOptions.responseTimeoutMode();
        if (responseTimeoutMode != null) {
            responseTimeoutMode(responseTimeoutMode);
        }
        return this;
    }
Deserializes the JSON content of the {@link HttpResponse} into the specified Java type using the
specified {@link ObjectMapper}. This method is useful when you want to deserialize the content into a
container type such as {@link List} and {@link Map}.
For example:
<pre>{@code
ObjectMapper mapper = ...;
WebClient client = WebClient.of("https://api.example.com");
CompletableFuture<ResponseEntity<List<MyObject>>> response =
    client.prepare()
          .get("/v1/items/1")
          .asJson(new TypeReference<List<MyObject>> {}, mapper)
          .execute();
}</pre>

@throws InvalidHttpResponseException if the {@link HttpStatus} of the response is not
                                     {@linkplain HttpStatus#isSuccess() success} or fails to decode
                                     the response body into the result type.
core/src/main/java/com/linecorp/armeria/client/WebClientRequestPreparation.java