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

public class FormBuilder extends Object
Specialized builder to simplify the creation of urlencoded and multipart forms. This builder is just creating an entity passed into usual GET or POST builders (these are the only possible methods for http forms).

Important: multipart support requires an additional dependency: 'org.glassfish.jersey.media:jersey-media-multipart'.

The type of the form is detected by provided values: if at least one value requires multipart, then multipart entity is created, otherwise urlencoded entity created. Only urlencoded entity could be used with GET. Multipart form type could be explicitly forced with forceMultipart().

Multipart values are: File, InputStream, or any BodyPart (including prepared fild objects like FormDataBodyPart.

Example urlencoded form usage:


     buildForm(...)
     .param("name1", value1)
     .param("name2", value2)
     .buildPost()
     .invoke()
 

Example multipart form usage:


     buildForm(...)
     .param("name1", value1)
     .param("file", file)
     .buildPost()
     .invoke()
 

Also, builder could be used just for entity building: buildEntity() (for manual entity usage).

HTTP standard supports only GET and POST methods for forms, so there are no other shortcuts.

Since:
15.09.2025
  • Constructor Details

    • FormBuilder

      public FormBuilder(jakarta.ws.rs.client.WebTarget target, TestRequestConfig config)
      Create form builder.
      Parameters:
      target - form target
      config - inherited defaults
  • Method Details

    • forceMultipart

      public FormBuilder forceMultipart()
      Normally, a form type is detected from the provided values: if at least one value requires multipart, then multipart type selected, otherwise urlencoded used.

      This option forces multipart type usage, even if it is not required according to provided values.

      Returns:
      builder instance for chained calls
    • dateFormatter

      public FormBuilder dateFormatter(DateFormat formatter)
      Java.util date formatter for formatting date parameters.
      Parameters:
      formatter - date formatter
      Returns:
      builder instance for chained calls
      See Also:
    • dateTimeFormatter

      public FormBuilder dateTimeFormatter(DateTimeFormatter formatter)
      Java.time formatter for formatting date parameters.
      Parameters:
      formatter - date formatter
      Returns:
      builder instance for chained calls
      See Also:
    • dateFormat

      public FormBuilder dateFormat(String format)
      Shortcut to configure both date formatters with the same pattern.
      Parameters:
      format - format
      Returns:
      builder instance for chained calls
      See Also:
    • param

      public FormBuilder param(String name, Object value)
      Add form parameter. Multiple values could be provided with collection or array.

      File or InputStream or anything derived from BodyPart would lead to multipart form creation. For multipart requests, value could be provided in form of manually constructed fiels, like FormDataMultiPart (any body part implementation).

      For other value types, value is converted to string:

      • Date fields string conversion could be customized with date formatters (one for java.util and other for java.time api).
      • Null values converted to ""
      • Collections converted to a comma-separated string of values (converted to string)
      • By default, call toString on provided object

      Custom date formatters could be set as a default for all requests with: TestClientDefaults.defaultFormDateFormatter(java.text.DateFormat) and TestClientDefaults.defaultFormDateTimeFormatter(java.time.format.DateTimeFormatter). Or for request with: dateFormatter(java.text.DateFormat) and dateTimeFormatter(java.time.format.DateTimeFormatter).

      Multiple calls override previously declared parameter.

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

      public FormBuilder param(String name, Object... values)
      Same as param(String, Object) but provides multiple parameters for the same name.
      Parameters:
      name - parameter name
      values - parameter values
      Returns:
      builder instance for chained calls
    • params

      public FormBuilder params(Map<String,Object> params)
      Adds multiple form params. Multiple values could be provided with collection or array.
      Parameters:
      params - form params map.
      Returns:
      builder instance for chained calls
    • buildPost

      public TestClientRequestBuilder buildPost()
      Build POST request builder for a form. This is the same as calling TestClient.buildPost(String, Object, Object...), but with pre-build entity.
      Returns:
      POST request builder
    • buildGet

      public TestClientRequestBuilder buildGet()
      Build GET request builder for a form. This is the same as calling TestClient.buildGet(String, Object...), but with pre-build query params.

      Call will be failed if multipart form creation is required (which can't be handled with GET).

      Returns:
      GET request builder
    • buildEntity

      public jakarta.ws.rs.client.Entity<?> buildEntity()
      Build entity for manual usage in calls.

      For example, could be used in manual post call (as body): post("/somePath/", form).invoke().

      Returns:
      entity (form body)
    • buildQueryParams

      public Map<String,Object> buildQueryParams()
      Build query parameters for manual usage in GET calls.

      For example: buildGet("/somePath/").queryParams(params).invoke())

      Parameters with multiple values would contain lists of values.

      Returns:
      parameters map to be used in GET request
    • toString

      public String toString()
      Overrides:
      toString in class Object