Browse Source
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3083 50f2f4bb-b051-0410-bef5-90022cba6387pull/1/head
9 changed files with 670 additions and 59 deletions
@ -0,0 +1,168 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2002-2010 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.http; |
||||||
|
|
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import org.springframework.util.LinkedMultiValueMap; |
||||||
|
import org.springframework.util.MultiValueMap; |
||||||
|
|
||||||
|
/** |
||||||
|
* Represents an HTTP request or response entity, consisting of headers and body. |
||||||
|
* |
||||||
|
* <p>Typically used in combination with the {@link org.springframework.web.client.RestTemplate RestTemplate}, like so: |
||||||
|
* <pre class="code"> |
||||||
|
* HttpEntity<String> entity = new HttpEntity<String>(helloWorld, MediaType.TEXT_PLAIN); |
||||||
|
* URI location = template.postForLocation("http://example.com", entity); |
||||||
|
* </pre> |
||||||
|
* or |
||||||
|
* <pre class="code"> |
||||||
|
* HttpEntity<String> entity = template.getForEntity("http://example.com", String.class); |
||||||
|
* String body = entity.getBody(); |
||||||
|
* MediaType contentType = entity.getHeaders().getContentType(); |
||||||
|
* </pre> |
||||||
|
* |
||||||
|
* @author Arjen Poutsma |
||||||
|
* @see org.springframework.web.client.RestTemplate |
||||||
|
* @see #getBody() |
||||||
|
* @see #getHeaders() |
||||||
|
* @since 3.0.2 |
||||||
|
*/ |
||||||
|
public class HttpEntity<T> { |
||||||
|
|
||||||
|
/** |
||||||
|
* The empty {@code HttpEntity}, with no body or headers. |
||||||
|
*/ |
||||||
|
public static final HttpEntity EMPTY = new HttpEntity(); |
||||||
|
|
||||||
|
private final HttpHeaders headers; |
||||||
|
|
||||||
|
private final T body; |
||||||
|
|
||||||
|
/** |
||||||
|
* Create a new, empty {@code HttpEntity}. |
||||||
|
*/ |
||||||
|
private HttpEntity() { |
||||||
|
this(null, (MultiValueMap<String, String>) null); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Create a new {@code HttpEntity} with the given body and no headers. |
||||||
|
* |
||||||
|
* @param body the entity body |
||||||
|
*/ |
||||||
|
public HttpEntity(T body) { |
||||||
|
this(body, (MultiValueMap<String, String>) null); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Create a new {@code HttpEntity} with the given headers and no body. |
||||||
|
* |
||||||
|
* @param headers the entity headers |
||||||
|
*/ |
||||||
|
public HttpEntity(Map<String, String> headers) { |
||||||
|
this(null, toMultiValueMap(headers)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Create a new {@code HttpEntity} with the given headers and no body. |
||||||
|
* |
||||||
|
* @param headers the entity headers |
||||||
|
*/ |
||||||
|
public HttpEntity(MultiValueMap<String, String> headers) { |
||||||
|
this(null, headers); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Create a new {@code HttpEntity} with the given body and {@code Content-Type} header value. |
||||||
|
* |
||||||
|
* @param body the entity body |
||||||
|
* @param contentType the value of the {@code Content-Type header} |
||||||
|
*/ |
||||||
|
public HttpEntity(T body, MediaType contentType) { |
||||||
|
this(body, toMultiValueMap(contentType)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Create a new {@code HttpEntity} with the given body and headers. |
||||||
|
* |
||||||
|
* @param body the entity body |
||||||
|
* @param headers the entity headers |
||||||
|
*/ |
||||||
|
public HttpEntity(T body, Map<String, String> headers) { |
||||||
|
this(body, toMultiValueMap(headers)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Create a new {@code HttpEntity} with the given body and headers. |
||||||
|
* |
||||||
|
* @param body the entity body |
||||||
|
* @param headers the entity headers |
||||||
|
*/ |
||||||
|
public HttpEntity(T body, MultiValueMap<String, String> headers) { |
||||||
|
this.body = body; |
||||||
|
HttpHeaders tempHeaders = new HttpHeaders(); |
||||||
|
if (headers != null) { |
||||||
|
tempHeaders.putAll(headers); |
||||||
|
} |
||||||
|
this.headers = HttpHeaders.readOnlyHttpHeaders(tempHeaders); |
||||||
|
} |
||||||
|
|
||||||
|
private static MultiValueMap<String, String> toMultiValueMap(Map<String, String> map) { |
||||||
|
if (map == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
else { |
||||||
|
MultiValueMap<String, String> result = new LinkedMultiValueMap<String, String>(map.size()); |
||||||
|
result.setAll(map); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private static MultiValueMap<String, String> toMultiValueMap(MediaType contentType) { |
||||||
|
if (contentType == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
else { |
||||||
|
HttpHeaders result = new HttpHeaders(); |
||||||
|
result.setContentType(contentType); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Returns the headers of this entity. |
||||||
|
*/ |
||||||
|
public HttpHeaders getHeaders() { |
||||||
|
return headers; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Returns the body of this entity. |
||||||
|
*/ |
||||||
|
public T getBody() { |
||||||
|
return body; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Indicates whether this entity has a body. |
||||||
|
*/ |
||||||
|
public boolean hasBody() { |
||||||
|
return body != null; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,67 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2002-2010 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.http; |
||||||
|
|
||||||
|
import java.util.LinkedHashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import static org.junit.Assert.*; |
||||||
|
import org.junit.Test; |
||||||
|
|
||||||
|
import org.springframework.util.LinkedMultiValueMap; |
||||||
|
import org.springframework.util.MultiValueMap; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Arjen Poutsma |
||||||
|
*/ |
||||||
|
public class HttpEntityTests { |
||||||
|
|
||||||
|
@Test |
||||||
|
public void noHeaders() { |
||||||
|
String body = "foo"; |
||||||
|
HttpEntity<String> entity = new HttpEntity<String>(body); |
||||||
|
assertSame(body, entity.getBody()); |
||||||
|
assertTrue(entity.getHeaders().isEmpty()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void contentType() { |
||||||
|
MediaType contentType = MediaType.TEXT_PLAIN; |
||||||
|
HttpEntity<String> entity = new HttpEntity<String>("foo", contentType); |
||||||
|
assertEquals(contentType, entity.getHeaders().getContentType()); |
||||||
|
assertEquals("text/plain", entity.getHeaders().getFirst("Content-Type")); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void multiValueMap() { |
||||||
|
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>(); |
||||||
|
map.set("Content-Type", "text/plain"); |
||||||
|
HttpEntity<String> entity = new HttpEntity<String>("foo", map); |
||||||
|
assertEquals(MediaType.TEXT_PLAIN, entity.getHeaders().getContentType()); |
||||||
|
assertEquals("text/plain", entity.getHeaders().getFirst("Content-Type")); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void map() { |
||||||
|
Map<String, String> map = new LinkedHashMap<String, String>(); |
||||||
|
map.put("Content-Type", "text/plain"); |
||||||
|
HttpEntity<String> entity = new HttpEntity<String>("foo", map); |
||||||
|
assertEquals(MediaType.TEXT_PLAIN, entity.getHeaders().getContentType()); |
||||||
|
assertEquals("text/plain", entity.getHeaders().getFirst("Content-Type")); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue