diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/JsonpTransportHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/JsonpTransportHandler.java index 2bf3a3feba..585fcb2272 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/JsonpTransportHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/JsonpTransportHandler.java @@ -61,7 +61,8 @@ public class JsonpTransportHandler extends AbstractHttpReceivingTransportHandler @Override protected String[] readMessages(ServerHttpRequest request) throws IOException { - if (MediaType.APPLICATION_FORM_URLENCODED.equals(request.getHeaders().getContentType())) { + MediaType contentType = request.getHeaders().getContentType(); + if ((contentType != null) && MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(contentType)) { MultiValueMap map = this.formConverter.read(null, request); String d = map.getFirst("d"); return (StringUtils.hasText(d)) ? getObjectMapper().readValue(d, String[].class) : null; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/HttpReceivingTransportHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/HttpReceivingTransportHandlerTests.java index 244c2edb6c..ee184d0fd6 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/HttpReceivingTransportHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/HttpReceivingTransportHandlerTests.java @@ -73,6 +73,18 @@ public class HttpReceivingTransportHandlerTests extends AbstractHttpRequestTest assertEquals("ok", this.servletResponse.getContentAsString()); } + // SPR-10621 + + @Test + public void readMessagesJsonpFormEncodedWithEncoding() throws Exception { + this.servletRequest.setContent("d=[\"x\"]".getBytes("UTF-8")); + this.servletRequest.setContentType("application/x-www-form-urlencoded;charset=UTF-8"); + handleRequest(new JsonpTransportHandler()); + + assertEquals(200, this.servletResponse.getStatus()); + assertEquals("ok", this.servletResponse.getContentAsString()); + } + @Test public void readMessagesBadContent() throws Exception { this.servletRequest.setContent("".getBytes("UTF-8"));