- All Implemented Interfaces:
Iterable<HttpField>
,Supplier<HttpFields>
,HttpFields
,HttpFields.Mutable
- Direct Known Subclasses:
HttpTester.Message
- Enclosing interface:
HttpFields
This class is not synchronized as it is expected that modifications will only be performed by a single thread.
The cookie handling provided by this class is guided by the Servlet specification and RFC6265.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.eclipse.jetty.http.HttpFields
HttpFields.ImmutableHttpFields, HttpFields.Mutable, HttpFields.MutableHttpFields
Nested classes/interfaces inherited from interface org.eclipse.jetty.http.HttpFields.Mutable
HttpFields.Mutable.Wrapper
-
Field Summary
Fields inherited from interface org.eclipse.jetty.http.HttpFields
CONNECTION_CLOSE, CONNECTION_KEEPALIVE, CONTENT_LENGTH_0, EMPTY, EXPIRES_01JAN1970
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
Initialize an empty HttpFields.protected
MutableHttpFields
(int capacity) Initialize an empty HttpFields.protected
MutableHttpFields
(HttpFields fields) Initialize HttpFields from another.protected
MutableHttpFields
(HttpFields fields, EnumSet<HttpHeader> removeFields) Initialize HttpFields from another and remove fieldsprotected
MutableHttpFields
(HttpFields fields, HttpField replaceField) Initialize HttpFields from another and replace a field -
Method Summary
Modifier and TypeMethodDescriptionadd
(HttpFields fields) clear()
void
computeField
(String name, BiFunction<String, List<HttpField>, HttpField> computeFn) Computes a single field for the given HTTP header name and for existing fields with the same name.void
computeField
(HttpHeader header, BiFunction<HttpHeader, List<HttpField>, HttpField> computeFn) Computes a single field for the given HttpHeader and for existing fields with the same header.<T> void
computeField
(T header, BiFunction<T, List<HttpField>, HttpField> computeFn, BiPredicate<HttpField, T> matcher) boolean
getField
(int index) Get a Field by index.int
hashCode()
iterator()
Set a field.Set a field.put
(HttpHeader header, String value) Set a field.put
(HttpHeader header, HttpHeaderValue value) Remove a field.remove
(EnumSet<HttpHeader> fields) remove
(HttpHeader name) Remove a field.int
size()
stream()
Efficiently take the fields as an Immutable that cannot be changed by any further mutations to this instance.toString()
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.eclipse.jetty.http.HttpFields
asString, contains, contains, contains, contains, contains, contains, get, get, get, getCSV, getCSV, getDateField, getDateField, getField, getField, getFieldNames, getFieldNamesCollection, getFields, getFields, getLongField, getLongField, getQualityCSV, getQualityCSV, getQualityCSV, getValues, getValuesList, getValuesList, isEqualTo
Methods inherited from interface org.eclipse.jetty.http.HttpFields.Mutable
add, add, add, add, add, addCSV, addCSV, addDateField, ensureField, put, put, putDate, putDate
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Constructor Details
-
MutableHttpFields
protected MutableHttpFields()Initialize an empty HttpFields. -
MutableHttpFields
protected MutableHttpFields(int capacity) Initialize an empty HttpFields.- Parameters:
capacity
- the capacity of the http fields
-
MutableHttpFields
Initialize HttpFields from another.- Parameters:
fields
- the fields to copy data from
-
MutableHttpFields
Initialize HttpFields from another and replace a field- Parameters:
fields
- the fields to copy data fromreplaceField
- the replacement field
-
MutableHttpFields
Initialize HttpFields from another and remove fields- Parameters:
fields
- the fields to copy data fromremoveFields
- the the fields to remove
-
-
Method Details
-
add
- Specified by:
add
in interfaceHttpFields.Mutable
-
add
- Specified by:
add
in interfaceHttpFields.Mutable
-
asImmutable
- Specified by:
asImmutable
in interfaceHttpFields
-
takeAsImmutable
Description copied from interface:HttpFields
Efficiently take the fields as an Immutable that cannot be changed by any further mutations to this instance.- Specified by:
takeAsImmutable
in interfaceHttpFields
- Returns:
- An immutable version of the fields.
-
clear
- Specified by:
clear
in interfaceHttpFields.Mutable
-
equals
-
getField
Get a Field by index.- Specified by:
getField
in interfaceHttpFields
- Parameters:
index
- the field index- Returns:
- A Field value or null if the Field value has not been set
-
hashCode
public int hashCode() -
iterator
- Specified by:
iterator
in interfaceHttpFields.Mutable
- Specified by:
iterator
in interfaceIterable<HttpField>
-
listIterator
- Specified by:
listIterator
in interfaceHttpFields.Mutable
-
put
- Specified by:
put
in interfaceHttpFields.Mutable
-
put
Description copied from interface:HttpFields.Mutable
Set a field.- Specified by:
put
in interfaceHttpFields.Mutable
- Parameters:
name
- the name of the fieldvalue
- the value of the field. If null the field is cleared.- Returns:
- this builder
-
put
- Specified by:
put
in interfaceHttpFields.Mutable
-
put
Description copied from interface:HttpFields.Mutable
Set a field.- Specified by:
put
in interfaceHttpFields.Mutable
- Parameters:
header
- the header name of the fieldvalue
- the value of the field. If null the field is cleared.- Returns:
- this builder
-
put
Description copied from interface:HttpFields.Mutable
Set a field.- Specified by:
put
in interfaceHttpFields.Mutable
- Parameters:
name
- the name of the fieldlist
- the List value of the field. If null the field is cleared.- Returns:
- this builder
-
computeField
public void computeField(HttpHeader header, BiFunction<HttpHeader, List<HttpField>, HttpField> computeFn) Description copied from interface:HttpFields.Mutable
Computes a single field for the given HttpHeader and for existing fields with the same header.
The compute function receives the field name and a list of fields with the same name so that their values can be used to compute the value of the field that is returned by the compute function. If the compute function returns
null
, the fields with the given name are removed.This method comes handy when you want to add an HTTP header if it does not exist, or add a value if the HTTP header already exists, similarly to
Map.compute(Object, BiFunction)
.This method can be used to
put
a new field (or blindly replace its value):httpFields.computeField("X-New-Header", (name, fields) -> new HttpField(name, "NewValue"));
This method can be used to coalesce many fields into one:
// Input: GET / HTTP/1.1 Host: localhost Cookie: foo=1 Cookie: bar=2,baz=3 User-Agent: Jetty // Computation: httpFields.computeField("Cookie", (name, fields) -> { // No cookies, nothing to do. if (fields == null) return null; // Coalesces all cookies. String coalesced = fields.stream() .flatMap(field -> Stream.of(field.getValues())) .collect(Collectors.joining(", ")); // Returns a single Cookie header with all cookies. return new HttpField(name, coalesced); } // Output: GET / HTTP/1.1 Host: localhost Cookie: foo=1, bar=2, baz=3 User-Agent: Jetty
This method can be used to replace a field:
httpFields.computeField("X-Length", (name, fields) -> { if (fields == null) return null; // Get any value among the X-Length headers. String length = fields.stream() .map(HttpField::getValue) .findAny() .orElse("0"); // Replace X-Length headers with X-Capacity header. return new HttpField("X-Capacity", length); });
This method can be used to remove a field:
httpFields.computeField("Connection", (name, fields) -> null);
- Specified by:
computeField
in interfaceHttpFields.Mutable
- Parameters:
header
- the HTTP headercomputeFn
- the compute function
-
computeField
Description copied from interface:HttpFields.Mutable
Computes a single field for the given HTTP header name and for existing fields with the same name.
- Specified by:
computeField
in interfaceHttpFields.Mutable
- Parameters:
name
- the HTTP header namecomputeFn
- the compute function- See Also:
-
computeField
public <T> void computeField(T header, BiFunction<T, List<HttpField>, HttpField> computeFn, BiPredicate<HttpField, T> matcher) -
remove
Description copied from interface:HttpFields.Mutable
Remove a field.- Specified by:
remove
in interfaceHttpFields.Mutable
- Parameters:
name
- the field to remove- Returns:
- this builder
-
remove
- Specified by:
remove
in interfaceHttpFields.Mutable
-
remove
Description copied from interface:HttpFields.Mutable
Remove a field.- Specified by:
remove
in interfaceHttpFields.Mutable
- Parameters:
name
- the field to remove- Returns:
- this builder
-
size
public int size()- Specified by:
size
in interfaceHttpFields
-
stream
- Specified by:
stream
in interfaceHttpFields
-
toString
-