Browse Source

Recognize Content-Type as special header in MHSRB

When adding headers generically, MockHttpServletRequestBuilder now
recognizes Content-Type and updates the contentType field accordingly.

Issue: SPR-11308
pull/411/merge
Rossen Stoyanchev 11 years ago
parent
commit
8b35c3ff74
  1. 10
      spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java
  2. 25
      spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java

10
spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2014 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -141,6 +141,10 @@ public class MockHttpServletRequestBuilder implements RequestBuilder, Mergeable
* @param values one or more header values * @param values one or more header values
*/ */
public MockHttpServletRequestBuilder header(String name, Object... values) { public MockHttpServletRequestBuilder header(String name, Object... values) {
if ("Content-Type".equalsIgnoreCase(name)) {
List<MediaType> mediaTypes = MediaType.parseMediaTypes(StringUtils.arrayToCommaDelimitedString(values));
this.contentType = MediaType.toString(mediaTypes);
}
addToMultiValueMap(this.headers, name, values); addToMultiValueMap(this.headers, name, values);
return this; return this;
} }
@ -150,6 +154,10 @@ public class MockHttpServletRequestBuilder implements RequestBuilder, Mergeable
* @param httpHeaders the headers and values to add * @param httpHeaders the headers and values to add
*/ */
public MockHttpServletRequestBuilder headers(HttpHeaders httpHeaders) { public MockHttpServletRequestBuilder headers(HttpHeaders httpHeaders) {
MediaType mediaType = httpHeaders.getContentType();
if (mediaType != null) {
this.contentType = mediaType.toString();
}
for (String name : httpHeaders.keySet()) { for (String name : httpHeaders.keySet()) {
Object[] values = ObjectUtils.toObjectArray(httpHeaders.get(name).toArray()); Object[] values = ObjectUtils.toObjectArray(httpHeaders.get(name).toArray());
addToMultiValueMap(this.headers, name, values); addToMultiValueMap(this.headers, name, values);

25
spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2012 the original author or authors. * Copyright 2002-2014 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -28,6 +28,7 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import javax.print.attribute.standard.Media;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
@ -267,6 +268,28 @@ public class MockHttpServletRequestBuilderTests {
assertEquals("text/html", contentTypes.get(0)); assertEquals("text/html", contentTypes.get(0));
} }
// SPR-11308
@Test
public void contentTypeViaHeader() throws Exception {
this.builder.header("Content-Type", MediaType.TEXT_HTML_VALUE);
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);
String contentType = request.getContentType();
assertEquals("text/html", contentType);
}
// SPR-11308
@Test
public void contentTypeViaMultipleHeaderValues() throws Exception {
this.builder.header("Content-Type", MediaType.TEXT_HTML_VALUE, MediaType.ALL_VALUE);
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);
String contentType = request.getContentType();
assertEquals("text/html, */*", contentType);
}
@Test @Test
public void body() throws Exception { public void body() throws Exception {
byte[] body = "Hello World".getBytes("UTF-8"); byte[] body = "Hello World".getBytes("UTF-8");

Loading…
Cancel
Save