Class TestClientRequestBuilder

java.lang.Object
ru.vyarus.dropwizard.guice.test.client.builder.TestClientRequestBuilder

public class TestClientRequestBuilder extends Object
Request builder. Provides all the same configuration methods as jersey client builder. Supports default values, provided from the client.

Request could be executed:

In cases, when direct result mapping is not requested, a special response wrapper would be returned, supporting assertions in a builder manner.

Builder does not hide jerse WebTarget and Invocation.Builder objects: they could be configured manually with: configurePath(Function) and configureRequest(Consumer).

Since:
12.09.2025
  • Constructor Details

    • TestClientRequestBuilder

      public TestClientRequestBuilder(jakarta.ws.rs.client.WebTarget target, String httpMethod, jakarta.ws.rs.client.Entity<?> body, @Nullable TestRequestConfig defaults)
      Construct new request builder.
      Parameters:
      target - request target
      httpMethod - request method
      body - request entity (body)
      defaults - default request configuration (common headers, cookies, path params, etc)
  • Method Details

    • configurePath

      public TestClientRequestBuilder configurePath(Function<jakarta.ws.rs.client.WebTarget,jakarta.ws.rs.client.WebTarget> modifier)
      Manual jersey target object configuration.
      Parameters:
      modifier - function, applying target configuration
      Returns:
      builder instance for chained calls
    • configureRequest

      public TestClientRequestBuilder configureRequest(Consumer<jakarta.ws.rs.client.Invocation.Builder> modifier)
      Manual jersey request object configuration.
      Parameters:
      modifier - consumer, applying request configuration
      Returns:
      builder instance for chained calls
    • notFollowRedirects

      public TestClientRequestBuilder notFollowRedirects()
      Disable redirects following to validate redirection correctness (or redirection fact).

      Option is enabled automatically when expectRedirect(Integer...) is used.

      Returns:
      builder instance for chained calls
    • noBodyMappingForVoid

      public TestClientRequestBuilder noBodyMappingForVoid()
      In theory, jersey should avoid body mapping when void response requested (builder.readEntity(Void.class)), but jersey tries to map it and fils. This shortcut registers a special body mapper which would completely ignore the response body.

      Enabled automatically when asVoid() is used.

      Returns:
      builder instance for chained calls
    • accept

      public TestClientRequestBuilder accept(jakarta.ws.rs.core.MediaType... accept)
      Configure request Accept header ( Invocation.Builder.accept(jakarta.ws.rs.core.MediaType...)).

      Multiple calls override previous value.

      Parameters:
      accept - media types required for response
      Returns:
      builder instance for chained calls
      See Also:
      • MediaType
    • accept

      public TestClientRequestBuilder accept(String... accept)
      Configure request Accept header (Invocation.Builder.accept(String...)).

      Multiple calls override previous value.

      Parameters:
      accept - media types required for response
      Returns:
      builder instance for chained calls
      See Also:
      • MediaType
    • acceptLanguage

      public TestClientRequestBuilder acceptLanguage(Locale... language)
      Configure request Accept-Language header (Invocation.Builder.acceptLanguage(java.util.Locale...)).

      Multiple calls override previous value.

      Parameters:
      language - languages to accept
      Returns:
      builder instance for chained calls
    • acceptLanguage

      public TestClientRequestBuilder acceptLanguage(String... language)
      Configure request Accept-Language header (Invocation.Builder.acceptLanguage(String...)).

      Multiple calls override previous value.

      Parameters:
      language - languages to accept
      Returns:
      builder instance for chained calls
    • acceptEncoding

      public TestClientRequestBuilder acceptEncoding(String... encodings)
      Configure request Accept-Encoding header (Invocation.Builder.acceptEncoding(String...)).

      Multiple calls override previous value.

      Parameters:
      encodings - encodings to accept
      Returns:
      builder instance for chained calls
    • queryParam

      public TestClientRequestBuilder queryParam(String name, Object value)
      Configure request query parameter (WebTarget.queryParam(String, Object...)).

      Note: jersey api supports multiple query parameters with the same name (in this case multiple parameters added). The same result could be achieved by passing list or array into this api.

      Multiple calls with the same name override the previous value (the only way to specify multiple values is using list or array as value).

      Parameters:
      name - query parameter name
      value - parameter value (list or array for multiple values)
      Returns:
      builder instance for chained calls
    • queryParams

      public TestClientRequestBuilder queryParams(Map<String,?> params)
      Configure multiple query params at once.

      Note: jersey api supports multiple query parameters with the same name (in this case multiple parameters added). The same result could be achieved by passing list or array into this api.

      Multiple calls append to previous configurations (parameters with the same name are overridden)

      Parameters:
      params - query params map
      Returns:
      builder instance for chained calls
    • matrixParam

      public TestClientRequestBuilder matrixParam(String name, Object value)
      Configure request matrix parameter (WebTarget.matrixParam(String, Object...)).

      Note: jersey api supports multiple matrix parameters with the same name (in this case multiple parameters added). The same result could be achieved by passing list or array into this api.

      Multiple calls with the same name override the previous value (the only way to specify multiple values is using list or array as value).

      Parameters:
      name - matrix parameter name
      value - parameter value (list or array for multiple values)
      Returns:
      builder instance for chained calls
    • matrixParams

      public TestClientRequestBuilder matrixParams(Map<String,?> params)
      Configure multiple matrix params at once.

      Note: jersey api supports multiple matrix parameters with the same name (in this case multiple parameters added). The same result could be achieved by passing list or array into this api.

      Multiple calls append to previous configurations (parameters with the same name are overridden)

      Parameters:
      params - query params map
      Returns:
      builder instance for chained calls
    • pathParam

      public TestClientRequestBuilder pathParam(String name, Object value)
      Configure request path parameter (WebTarget.resolveTemplateFromEncoded(String, Object)).

      Note: parameter value assumed to be encoded to be able to specify matrix parameters (in the middle of the path): pathParam("var", "/path;var=1;val=2").

      Parameters:
      name - parameter name
      value - parameter value
      Returns:
      builder instance for chained calls
    • pathParams

      public TestClientRequestBuilder pathParams(Map<String,?> params)
      Configure multiple path params at once.

      Multiple calls append to previous configurations (parameters with the same name are overridden)

      Parameters:
      params - parameters map
      Returns:
      builder instance for chained calls
    • header

      public TestClientRequestBuilder header(org.eclipse.jetty.http.HttpHeader name, String value)
      Configure request header (Invocation.Builder.header(String, Object)).

      Multiple calls override previous value.

      Parameters:
      name - header name
      value - header value
      Returns:
      builder instance for chained calls
    • header

      public TestClientRequestBuilder header(String name, String value)
      Configure request header (Invocation.Builder.header(String, Object)).

      Multiple calls override previous value.

      Parameters:
      name - header name
      value - header value
      Returns:
      builder instance for chained calls
    • headers

      public TestClientRequestBuilder headers(Map<String,?> headers)
      Configure multiple headers at once.

      Multiple calls append to previous configurations (headers with the same name are overridden)

      Parameters:
      headers - headers map
      Returns:
      builder instance for chained calls
    • cookie

      public TestClientRequestBuilder cookie(String name, String value)
      Configure request cookie (Invocation.Builder.cookie(String, String).

      Multiple calls override previous value.

      Parameters:
      name - cookie name
      value - cookie value
      Returns:
      builder instance for chained calls
    • cookie

      public TestClientRequestBuilder cookie(jakarta.ws.rs.core.Cookie cookie)
      Configure request cookie (Invocation.Builder.cookie(jakarta.ws.rs.core.Cookie).

      Use cookie builder: new NewCookie.Builder(name).value(value).build().

      Multiple calls override previous value.

      Parameters:
      cookie - cookie value
      Returns:
      builder instance for chained calls
      See Also:
      • NewCookie
    • cookies

      public TestClientRequestBuilder cookies(Map<String,String> cookies)
      Configure multiple cookies at once.

      Multiple calls append to previous configurations (cookies with the same name are overridden).

      Parameters:
      cookies - cookie map
      Returns:
      builder instance for chained calls
    • property

      public TestClientRequestBuilder property(String name, Object value)
      Jersey client property configuration (JerseyClient.property(String, Object)).

      Multiple calls override previous value.

      Parameters:
      name - property name
      value - property value
      Returns:
      builder instance for chained calls
      See Also:
      • ClientProperties
    • properties

      public TestClientRequestBuilder properties(Map<String,?> props)
      Configure multiple properties at once.

      Multiple calls append to previous configurations (properties with the same name are overridden).

      Parameters:
      props - properties map
      Returns:
      builder instance for chained calls
    • register

      public TestClientRequestBuilder register(Class<?> type)
      Jersey client extension registration (JerseyClient.register(Class)). Could be useful, for example, to register custom MessageBodyReader.

      Multiple registrations of the same class will be ignored (extensions tracked by type).

      Parameters:
      type - extension class
      Returns:
      builder instance for chained calls
    • register

      public TestClientRequestBuilder register(Object extension)
      Jersey client extension registration (JerseyClient.register(Object)). Could be useful, for example, to register custom MessageBodyReader (as instance).

      When called with different instances of the same class: only the latest registration will be used (extensions tracked by type).

      Parameters:
      extension - extensions instance
      Returns:
      builder instance for chained calls
    • cacheControl

      public TestClientRequestBuilder cacheControl(String cacheControl)
      Configure request Cache-Control header (Invocation.Builder.cacheControl(CacheControl)).

      Multiple calls override previous value.

      Parameters:
      cacheControl - cache control header value (string) to apply to request.
      Returns:
      builder instance for chained calls
    • cacheControl

      public TestClientRequestBuilder cacheControl(jakarta.ws.rs.core.CacheControl cacheControl)
      Configure request Cache-Control header (Invocation.Builder.cacheControl(CacheControl)).

      Multiple calls override previous value.

      Parameters:
      cacheControl - cache control settings to apply to request.
      Returns:
      builder instance for chained calls
    • debug

      public TestClientRequestBuilder debug()
      Enable console reporting for configured default values and applied request customizations.
      Returns:
      builder instance for chained calls
    • enableJerseyTrace

      public TestClientRequestBuilder enableJerseyTrace()
      Shortcut for jersey trace requesting: jersey should return trace as X-Jersey-Tracing-NNN headers.

      WARNING: Tracing support MUST be enabled on server with: environment.jersey().property(ServerProperties.TRACING, TracingConfig.ON_DEMAND.name());

      This is assumed to be used for remote apis.

      Returns:
      builder instance for chained calls
    • enableJerseyTrace

      public TestClientRequestBuilder enableJerseyTrace(org.glassfish.jersey.message.internal.TracingLogger.Level level)
      enableJerseyTrace() with custom trace level.
      Parameters:
      level - trace level
      Returns:
      builder instance for chained calls
    • assertRequest

      public TestClientRequestBuilder assertRequest(Consumer<RequestTracker> action)
      Assert WebTarget and Invocation.Builder objects configurations. Could be used to verify request correctness.

      Implicitly enables debug(), so all applied configurations would be printed to console first and then assertions applied.

      Assertions executed just before request execution.

      Parameters:
      action - assertion action
      Returns:
      builder instance for chanined calls
    • asVoid

      public void asVoid()
      Invoke request and expect successful status (2xx). Response body is ignored.

      In case of not successful request, exception would be thrown according to response status.

      Note: this option would implicitly enable noBodyMappingForVoid().

      Under StubRest it will bypass original exception (when no exception mappers registered).

    • as

      public <T> T as(@Nullable Class<T> type)
      Invoke request and expect successful status (2xx). Response body is mapped to the specified type. This is essentially the same as jersey shortcut methods like response.get(SomeEntity.class).

      In case of not successful request, exception would be thrown according to response status.

      Under StubRest it will bypass original exception (when no exception mappers registered).

      Type Parameters:
      T - response type
      Parameters:
      type - response type
      Returns:
      mapped response instance
    • as

      public <T> T as(@Nullable jakarta.ws.rs.core.GenericType<T> type)
      Invoke request and expect successful status (2xx). Response body is mapped to the specified type. This is essentially the same as jersey shortcut methods like response.get(new GenericType<SomeEntity>(){}.

      In case of not successful request, exception would be thrown according to response status.

      Under StubRest it will bypass original exception (when no exception mappers registered).

      Type Parameters:
      T - response type
      Parameters:
      type - response type
      Returns:
      mapped response instance
    • asString

      public String asString()
      Shortcut to as(Class).
      Returns:
      response body as string
    • invoke

      public TestClientResponse invoke()
      Invoke request without status validation (same as jersey Invocation.invoke()). For automatic status validation see expectSuccess(Integer...), expectFailure(Integer...) and expectRedirect(Integer...).

      Under StubRest it will bypass original exception (when no exception mappers registered).

      Note: IDE may highlight that method must be used under 'try-with-resources` (because the underlying response must be correctly closed), but you can ignore it, because all responses are closed automatically.

      Returns:
      response wrapper object with additional assertions
    • expectSuccess

      public TestClientResponse expectSuccess(Integer... statuses)
      Invoke a request with status validation. It will throw an exception for non 2xx response (same as as(Class)). Will throw assertion error if response status does not match.

      Under StubRest it will bypass original exception (when no exception mappers registered).

      Note: IDE may highlight that method must be used under 'try-with-resources` (because the underlying response must be correctly closed), but you can ignore it, because all responses are closed automatically.

      Parameters:
      statuses - (optional) statuses to match (when exact status validation is important)
      Returns:
      response wrapper object with additional assertions
    • expectFailure

      public TestClientResponse expectFailure(Integer... statuses)
      Invoke a request with status validation. Will throw assertion error if response status is success or does not match one of the provided statuses.

      Suitable for testing error response (or when exception mapped by some exception mapper).

      Under StubRest it will bypass original exception (when no exception mappers registered).

      Note: IDE may highlight that method must be used under 'try-with-resources` (because the underlying response must be correctly closed), but you can ignore it, because all responses are closed automatically.

      Parameters:
      statuses - (optional) statuses to match (when exact status validation is important)
      Returns:
      response wrapper object with additional assertions
    • expectRedirect

      public TestClientResponse expectRedirect(Integer... statuses)
      Invoke a request with status validation. Will throw assertion error if response status is not redirect or does not match one of provided statuses.

      Note: implicitly enables notFollowRedirects().

      Under StubRest it will bypass original exception (when no exception mappers registered).

      Note: IDE may highlight that method must be used under 'try-with-resources` (because the underlying response must be correctly closed), but you can ignore it, because all responses are closed automatically.

      Parameters:
      statuses - (optional) statuses to match (when exact status validation is important)
      Returns:
      response wrapper object with additional assertions
    • getConfig

      public TestRequestConfig getConfig()
      Returns:
      request configuration
    • toString

      public String toString()
      Overrides:
      toString in class Object