Skip to content

Consume Map in multipart form #6976

Open
@pgoergler

Description

@pgoergler

Expected Behavior

Deserialize multipart list in POJO.

2022-03-01 18:17:05,847 > Got: Request[messages={0=Hello world, 1=Hola todos}]
2022-03-01 18:17:05,849 > Got: [{0=Hello world, 1=Hola todos}]

Actual Behaviour

Lists are not deserialized:

2022-03-01 18:17:05,847 > Got: Request[messages=null]
2022-03-01 18:17:05,849 > Got: null

Steps To Reproduce

  1. With HttpController:
@Controller("/messages")
public class MessageController {
    static final Logger LOGGER = LoggerFactory.getLogger(MessageController.class);

    @Post(produces = MediaType.APPLICATION_JSON, consumes = {MediaType.APPLICATION_FORM_URLENCODED, MediaType.MULTIPART_FORM_DATA})
    public HttpResponse<Response> index(@Body Request request) {
        LOGGER.info("Got: {}", request);
        LOGGER.info("Got: {}", request.messages() != null ? List.of(request.messages()) : null);
        return HttpResponse.ok(new Response(false));
    }

    private record Request(
            Map<String, String> messages
    ) {}

    private record Response(
            Boolean success
    ) {}
}
  1. With Curl
curl --request POST \
  --url http://localhost/messages \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data 'messages[0]=Hello world' \
  --data 'messages[1]=Hola todos'
  1. The logs are:
2022-03-01 18:17:05,847 > Got: Request[messages=null] 
2022-03-01 18:17:05,849 > Got: null 

Environment Information

  • openjdk-16.0.2

Example Application

No response

Version

3.3.3

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions