Eu estava vendo um problema estranho em que usar @RequestParam para uma chamada POST com Spring MVC não estava funcionando e o parâmetro era sempre nulo.
Dei uma olhada no código FormHTTPMessageConverter e percebi que o corpo sempre vinha em branco, embora a solicitação de entrada tivesse um corpo.
public MultiValueMap<String, String> read(Class<? extends MultiValueMap<String, ?>> clazz,
HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
MediaType contentType = inputMessage.getHeaders().getContentType();
Charset charset = contentType.getCharSet() != null ? contentType.getCharSet() : this.charset;
String body = FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(), charset));
Portanto, alguém estava consumindo o inputStream na mensagem de solicitação antes de atingir este conversor e, depois de algumas pesquisas, descobri que o culpado era RequestLoggingFilter que habilitei em web.xml e configurei a opção de log payLoad como true. Com certeza, ele estava registrando a carga útil, mas consumindo o fluxo de entrada, tornando-o disponível para qualquer coisa no futuro! Desativei o registro do payLoad e tudo funcionou bem novamente!