title: Client posting multipart form data
body: <p>I'm trying to create a client which I use to test my controller</p>
  
  <p>The controller</p>
  
  <pre><code>@Secured(SecurityRule.IS_AUTHENTICATED)
  @Controller
  class InjuryController(private val userService: UserService, private val injuryService: InjuryService) {
  ...
      @Consumes(MediaType.MULTIPART_FORM_DATA)
      @Post("/injuries/{id}/images")
      fun postImage(id: Long, file: CompletedFileUpload, principal: Principal): HttpResponse&lt;*&gt;? {
          ...
          return HttpResponse.ok(imageReference)
      }
  ...
  }
  </code></pre>
  
  <p>The client</p>
  
  <pre><code>@Client("/")
  interface InjuryClient {
      @Post("/injuries/{id}/images", produces = [MULTIPART_FORM_DATA])
      fun postImage(id: Long, body: MultipartBody, @Header authorization: String): ImageReference
  }
  </code></pre>
  
  <p>The test</p>
  
  <pre><code>@Test
  fun `Post an image an injury`() {
      // Given
      val description = "description"
      val occurredAt = LocalDateTime.now()
      val id = createInjury(description, occurredAt).id
  
      val toWrite = "test file"
      val file = File.createTempFile("data", ".txt")
      FileWriter(file).apply {
          write(toWrite)
          close()
      }
  
      val requestBody = MultipartBody.builder()
              .addPart("data",
                      file.name,
                      MediaType.TEXT_PLAIN_TYPE,
                      file
              ).build()
  
      // When
      val response = injuryClient.postImage(id, requestBody, authorization)
  
      // Then
      assertEquals("$id:${file.name}", response.key)
  }
  </code></pre>
  
  <p>The error</p>
  
  <pre><code>The type java.util.LinkedHashMap is not a supported type for a multipart request body
  io.micronaut.http.multipart.MultipartException: The type java.util.LinkedHashMap is not a supported type for a multipart request body
      at io.micronaut.http.client.DefaultHttpClient.buildMultipartRequest(DefaultHttpClient.java:2063)
      at io.micronaut.http.client.DefaultHttpClient.buildNettyRequest(DefaultHttpClient.java:1480)
      at io.micronaut.http.client.DefaultHttpClient.sendRequestThroughChannel(DefaultHttpClient.java:1599)
      at io.micronaut.http.client.DefaultHttpClient.lambda$null$27(DefaultHttpClient.java:1035)
      at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577)
      at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:570)
      at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:549)
      at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490)
      at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615)
      at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604)
      at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
      at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
      at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:300)
      at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:335)
      at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:688)
      at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635)
      at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552)
      at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514)
      at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044)
      at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
      at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
      at java.base/java.lang.Thread.run(Thread.java:834)
  </code></pre>
  
  <p>Any clue about how to get rid of that error?</p>