{title:'POJO Marshalling', created:'8.2.0', updated:'9.0.0'}

By default, JSON support is provided for HTTP request and response bodies. Other languages can be specified using any of the following builder methods:

- {@link oajrc.RestClient.Builder}
  - {@link oajrc.RestClient.Builder#json() json()}
  - {@link oajrc.RestClient.Builder#json5() json5()}
  - {@link oajrc.RestClient.Builder#xml() xml()}
  - {@link oajrc.RestClient.Builder#html() html()}
  - {@link oajrc.RestClient.Builder#plainText() plainText()}
  - {@link oajrc.RestClient.Builder#msgPack() msgPack()}
  - {@link oajrc.RestClient.Builder#uon() uon()}
  - {@link oajrc.RestClient.Builder#urlEnc() urlEnc()}
  - {@link oajrc.RestClient.Builder#openApi() openApi()}

##### Example:

| // Create a basic REST client with JSON 5 support. | // Typically easier to use when performing unit tests. | RestClient client = RestClient.create().json5().build();

Clients can also support multiple languages:

##### Example:

| // Create a REST client with support for multiple languages. | RestClient client1 = RestClient.create().json().xml().openApi().build(); | | // Create a REST client with support for all supported languages. | RestClient client2 = RestClient.create().universal().build();

When using clients with multiple language support, the request language is selected by setting the Content-Type request header.

| // Create a REST client with support for multiple languages. | RestClient client = RestClient.create().universal().build(); | | client.post(URI, myBean) | .contentType("application/json") | .complete() | .assertStatus().asCode().is(200);

Languages can also be specified per-request.

| // Create a REST client with no default languages supported. | RestClient client = RestClient.create().build(); | | // Use JSON for this request. | client.post(URI, myBean) | .json() | .complete() | .assertStatus().asCode().is(200);

The {@link oajrc.RestClient.Builder} class provides convenience methods for setting common serializer and parser settings.

##### Example:

| // Create a basic REST client with JSON support. | // Use single-quotes and whitespace. | RestClient client1 = RestClient.create().json().sq().ws().build();

Other methods are also provided for specifying the serializers and parsers used for lower-level marshalling support:

- {@link oajrc.RestClient.Builder}
  - {@link oajrc.RestClient.Builder#serializer(Serializer) serializer(Serializer)}
  - {@link oajrc.RestClient.Builder#parser(Parser) parser(Parser)}
  - {@link oajrc.RestClient.Builder#marshaller(Marshaller) marshaller(Marshaller)}

HTTP parts (headers, query parameters, form data...) are serialized and parsed using the {@link oaj.httppart.HttpPartSerializer} and {@link oaj.httppart.HttpPartParser} APIs. By default, clients are configured to use {@link oaj.oapi.OpenApiSerializer} and {@link oaj.oapi.OpenApiParser}. These can be overridden using the following methods:

- {@link oajrc.RestClient.Builder}
  - {@link oajrc.RestClient.Builder#partSerializer(Class) partSerializer(Class<? extends HttpPartSerializer>)}
  - {@link oajrc.RestClient.Builder#partParser(Class) partParser(Class<? extends HttpPartParser>)}