/*
 * Copyright 2002-2020 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
 *
 *      https://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 org.springframework.lang.Nullable;
import org.springframework.util.MultiValueMap;
import org.springframework.util.ObjectUtils;

Represents an HTTP request or response entity, consisting of headers and body.

Typically used in combination with the RestTemplate, like so:

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);
HttpEntity<String> entity = new HttpEntity<String>(helloWorld, headers);
URI location = template.postForLocation("https://example.com", entity);
or
HttpEntity<String> entity = template.getForEntity("https://example.com", String.class);
String body = entity.getBody();
MediaType contentType = entity.getHeaders().getContentType();
Can also be used in Spring MVC, as a return value from a @Controller method:
@RequestMapping("/handle")
public HttpEntity<String> handle() {
  HttpHeaders responseHeaders = new HttpHeaders();
  responseHeaders.set("MyResponseHeader", "MyValue");
  return new HttpEntity<String>("Hello World", responseHeaders);
}
Author:Arjen Poutsma, Juergen Hoeller
Type parameters:
  • <T> – the body type
See Also:
Since:3.0.2
/** * 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}, * like so: * <pre class="code"> * HttpHeaders headers = new HttpHeaders(); * headers.setContentType(MediaType.TEXT_PLAIN); * HttpEntity&lt;String&gt; entity = new HttpEntity&lt;String&gt;(helloWorld, headers); * URI location = template.postForLocation("https://example.com", entity); * </pre> * or * <pre class="code"> * HttpEntity&lt;String&gt; entity = template.getForEntity("https://example.com", String.class); * String body = entity.getBody(); * MediaType contentType = entity.getHeaders().getContentType(); * </pre> * Can also be used in Spring MVC, as a return value from a @Controller method: * <pre class="code"> * &#64;RequestMapping("/handle") * public HttpEntity&lt;String&gt; handle() { * HttpHeaders responseHeaders = new HttpHeaders(); * responseHeaders.set("MyResponseHeader", "MyValue"); * return new HttpEntity&lt;String&gt;("Hello World", responseHeaders); * } * </pre> * * @author Arjen Poutsma * @author Juergen Hoeller * @since 3.0.2 * @param <T> the body type * @see org.springframework.web.client.RestTemplate * @see #getBody() * @see #getHeaders() */
public class HttpEntity<T> {
The empty HttpEntity, with no body or headers.
/** * The empty {@code HttpEntity}, with no body or headers. */
public static final HttpEntity<?> EMPTY = new HttpEntity<>(); private final HttpHeaders headers; @Nullable private final T body;
Create a new, empty HttpEntity.
/** * Create a new, empty {@code HttpEntity}. */
protected HttpEntity() { this(null, null); }
Create a new HttpEntity with the given body and no headers.
Params:
  • body – the entity body
/** * Create a new {@code HttpEntity} with the given body and no headers. * @param body the entity body */
public HttpEntity(T body) { this(body, null); }
Create a new HttpEntity with the given headers and no body.
Params:
  • headers – the entity 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 HttpEntity with the given body and headers.
Params:
  • body – the entity body
  • headers – the entity headers
/** * Create a new {@code HttpEntity} with the given body and headers. * @param body the entity body * @param headers the entity headers */
public HttpEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers) { this.body = body; this.headers = HttpHeaders.readOnlyHttpHeaders(headers != null ? headers : new HttpHeaders()); }
Returns the headers of this entity.
/** * Returns the headers of this entity. */
public HttpHeaders getHeaders() { return this.headers; }
Returns the body of this entity.
/** * Returns the body of this entity. */
@Nullable public T getBody() { return this.body; }
Indicates whether this entity has a body.
/** * Indicates whether this entity has a body. */
public boolean hasBody() { return (this.body != null); } @Override public boolean equals(@Nullable Object other) { if (this == other) { return true; } if (other == null || other.getClass() != getClass()) { return false; } HttpEntity<?> otherEntity = (HttpEntity<?>) other; return (ObjectUtils.nullSafeEquals(this.headers, otherEntity.headers) && ObjectUtils.nullSafeEquals(this.body, otherEntity.body)); } @Override public int hashCode() { return (ObjectUtils.nullSafeHashCode(this.headers) * 29 + ObjectUtils.nullSafeHashCode(this.body)); } @Override public String toString() { StringBuilder builder = new StringBuilder("<"); if (this.body != null) { builder.append(this.body); builder.append(','); } builder.append(this.headers); builder.append('>'); return builder.toString(); } }