Class HttpFields.Mutable
- All Implemented Interfaces:
Iterable<HttpField>
,HttpFields
- 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.Immutable, HttpFields.Mutable
-
Field Summary
Fields inherited from interface org.eclipse.jetty.http.HttpFields
EMPTY
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionAdd to or set a field.add
(HttpFields fields) add
(HttpHeader header, String value) Add to or set a field.add
(HttpHeader header, HttpHeaderValue value) Add comma separated values, but only if not already present.addCSV
(HttpHeader header, String... values) Add comma separated values, but only if not already present.addDateField
(String name, long date) Sets the value of a date field.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.void
ensureField
(HttpField field) Ensure that specific HttpField exists when the field may not exist or may exist and be multi valued.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) putDateField
(String name, long date) Sets the value of a date field.putDateField
(HttpHeader name, long date) Sets the value of a date field.putLongField
(String name, long value) Sets the value of an long field.putLongField
(HttpHeader name, long value) Sets the value of an long field.Remove a field.remove
(EnumSet<HttpHeader> fields) remove
(HttpHeader name) Remove a field.int
size()
stream()
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, getCSV, getCSV, getDateField, getField, getField, getFieldNames, getFieldNamesCollection, getFields, getFields, getLongField, getLongField, getQualityCSV, getQualityCSV, getQualityCSV, getValues, getValuesList, getValuesList, isEqualTo
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Constructor Details
-
Mutable
protected Mutable()Initialize an empty HttpFields.
-
-
Method Details
-
add
Add to or set a field. If the field is allowed to have multiple values, add will add multiple headers of the same name.- Parameters:
name
- the name of the fieldvalue
- the value of the field.- Returns:
- this builder
-
add
-
add
Add to or set a field. If the field is allowed to have multiple values, add will add multiple headers of the same name.- Parameters:
header
- the headervalue
- the value of the field.- Returns:
- this builder
-
add
-
add
-
addCSV
Add comma separated values, but only if not already present.- Parameters:
header
- The header to add the value(s) tovalues
- The value(s) to add- Returns:
- this builder
-
addCSV
Add comma separated values, but only if not already present.- Parameters:
name
- The header to add the value(s) tovalues
- The value(s) to add- Returns:
- this builder
-
addDateField
Sets the value of a date field.- Parameters:
name
- the field namedate
- the field date value- Returns:
- this builder
-
asImmutable
- Specified by:
asImmutable
in interfaceHttpFields
-
clear
-
ensureField
Ensure that specific HttpField exists when the field may not exist or may exist and be multi valued. Multiple existing fields are merged into a single field.- Parameters:
field
- The header to ensure is contained. The field is used directly if possible soPreEncodedHttpField
s can be passed. If the value needs to be merged with existing values, then a new field is created.
-
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
-
listIterator
-
put
-
put
Set a field.- Parameters:
name
- the name of the fieldvalue
- the value of the field. If null the field is cleared.- Returns:
- this builder
-
put
-
put
Set a field.- Parameters:
header
- the header name of the fieldvalue
- the value of the field. If null the field is cleared.- Returns:
- this builder
-
put
Set a field.- Parameters:
name
- the name of the fieldlist
- the List value of the field. If null the field is cleared.- Returns:
- this builder
-
putDateField
Sets the value of a date field.- Parameters:
name
- the field namedate
- the field date value- Returns:
- this builder
-
putDateField
Sets the value of a date field.- Parameters:
name
- the field namedate
- the field date value- Returns:
- this builder
-
putLongField
Sets the value of an long field.- Parameters:
name
- the field namevalue
- the field long value- Returns:
- this builder
-
putLongField
Sets the value of an long field.- Parameters:
name
- the field namevalue
- the field long value- Returns:
- this builder
-
computeField
public 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.
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);
- Parameters:
header
- the HTTP headercomputeFn
- the compute function
-
computeField
Computes a single field for the given HTTP header name and for existing fields with the same name.
- Parameters:
name
- the HTTP header namecomputeFn
- the compute function- See Also:
-
remove
Remove a field.- Parameters:
name
- the field to remove- Returns:
- this builder
-
remove
-
remove
Remove a field.- 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
-