The {@link oaj.http.part} package contains implementations of org.apache.http.NameValuePair to
be used for query/form-data/path parts and part lists.
- {@code org.apache.http.NameValuePair}
- {@link oaj.http.part.BasicPart}
- {@link oaj.http.part.BasicBooleanPart}
- {@link oaj.http.part.BasicCsvArrayPart}
- {@link oaj.http.part.BasicDatePart}
- {@link oaj.http.part.BasicIntegerPart}
- {@link oaj.http.part.BasicLongPart}
- {@link oaj.http.part.BasicPartIterator}
- {@link oaj.http.part.BasicStringPart}
- {@link oaj.http.part.BasicUriPart}
PartList
The {@link oaj.http.part.PartList} class is a list of HTTP parts (form-data, query-parameters, path-parameters).
| PartList parts = PartList
| .create()
| .append(MyPart.of("foo"))
| .append("Bar", ()->getDynamicValueFromSomewhere());
Convenience creators are provided for creating lists with minimal code:
| PartList parts = PartList.of(BasicIntegerPart.of("foo", 1));
Static methods are provided on {@link oaj.http.HttpParts} to further simplify creation of part lists.
| import static org.apache.juneau.http.HttpParts.*;
|
| PartList parts = partList(integerPart("foo", 1), booleanPart("bar", false));
The builder class supports setting default part values (i.e. add a part to the list if it isn't otherwise in the list).
Note that this is different from simply setting a value twice as using default values will not overwrite existing
parts.
The following example notes the distinction:
| parts = PartList
| .create()
| .set("Foo", "bar")
| .set("Foo", "baz");
| assertObject(parts).isString("foo=baz");
|
| parts = PartList
| .create()
| .set("Foo", "bar")
| .setDefault("Foo", "baz");
| assertObject(parts).isString("foo=bar");
Various methods are provided for iterating over the parts in this list to avoid array copies.
- {@link oaj.http.part.PartList#forEach(Consumer) forEach(Consumer)} / {@link oaj.http.part.PartList#forEach(String,Consumer) forEach(String,Consumer)} / {@link oaj.http.part.PartList#forEach(Predicate,Consumer) forEach(Predicate,Consumer)} - Use consumers to process parts.
- {@link oaj.http.part.PartList#partIterator() partIterator()} / {@link oaj.http.part.PartList#partIterator(String) partIterator(String)} - Use an {@link oaj.http.part.PartIterator} to process parts.
- {@link oaj.http.part.PartList#stream() stream()} / {@link oaj.http.part.PartList#stream(String) stream(String)} - Use a stream.
In general, try to use these over the {@link oaj.http.part.PartList#getAll() getAll()} / {@link oaj.http.part.PartList#getAll(String) getAll(String)} methods that require array copies.
Similar to the way multiple headers can be collapsed into a single value, the {@link oaj.http.part.PartList#get(String) get(String)} method is special in that it will collapse multiple parts with the same name into
a single comma-delimited list.
The {@link oaj.http.part.PartList#get(Class) get(Class)} and {@link oaj.http.part.PartList#get(String,Class) get(String,Class)} methods are provided for working with {@link oaj.http.annotation.FormData} / {@link oaj.http.annotation.Query} / {@link oaj.http.annotation.Path}-annotated
beans.
| MyQueryBean foo = parts.get(MyQueryBean.class);
A {@link oaj.svl.VarResolver} can be associated with this builder to create part values with embedded variables that
are resolved at runtime.
| // Create a part list with dynamically-resolving values pulled from a system property.
|
| System.setProperty("foo", "bar");
|
| PartList parts = PartList
| .create()
| .resolving()
| .append("X1", "$S{foo}")
| .append("X2", ()->"$S{foo}");
|
| assertObject(parts).isString("X1=bar&X2=bar");
The {@link oaj.http.part.PartList} object can be extended to defined pre-packaged lists of parts which can be used in various
annotations throughout the framework.
| // A predefined list of parts.
| public class MyPartList extends PartList {
| public MyPartList() {
| super(BasicIntegerPart.of("foo",1), BasicBooleanPart.of("bar",false));
| }
| }