Class BasicHttpResponse<SELF extends BasicHttpResponse<SELF>>
- Type Parameters:
SELF- The self type for fluent setters.
- All Implemented Interfaces:
HttpMessage,HttpResponse
- Direct Known Subclasses:
Accepted,AlreadyReported,Continue,Created,EarlyHints,Found,IMUsed,MovedPermanently,MultipleChoices,MultiStatus,NoContent,NonAuthoritiveInformation,NotModified,Ok,PartialContent,PermanentRedirect,Processing,ResetContent,SeeOther,SwitchingProtocols,TemporaryRedirect,UseProxy
HttpResponse interface.
Although this class implements the various setters defined on the HttpResponse interface, it's in general
going to be more efficient to set the status/headers/content of this bean through the builder.
Immutability is expressed with the "funnel + nested Unmodifiable snapshot" paradigm: every mutator (fluent
setter and void interface mutator) routes through the single protected modify(Runnable) choke-point,
and each concrete leaf gets a nested X.Unmodifiable whose only behavioral override is a throwing
modify(...). A leaf's unmodifiable() factory returns a point-in-time snapshot of type
X.Unmodifiable; any attempt to set a property on it throws an UnsupportedOperationException.
This is a self-typed (CRTP) root: a leaf declares
Notes:
- Beans are not thread safe unless they're marked as unmodifiable.
See Also:
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedBasicHttpResponse(HttpResponse response) Constructor.protectedBasicHttpResponse(BasicStatusLine statusLine) Constructor.protectedBasicHttpResponse(BasicHttpResponse<?> copyFrom) Copy constructor. -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidprotected voidassertStatusCode(HttpResponse response) Asserts that the specified HTTP response has the same status code as the one on the status line of this bean.booleancontainsHeader(String name) booleanprotected voidfreeze()Deep-freeze hook invoked from the nestedUnmodifiableconstructor after the snapshot copy completes.Header[]getFirstHeader(String name) Returns access to the underlying builder for the headers.Header[]getHeaders(String name) getLastHeader(String name) inthashCode()headerIterator(String name) booleanReturnstrue if this bean is unmodifiable.protected SELFSingle mutation funnel — the only choke-point through which all state changes on this bean flow.voidremoveHeader(Header value) voidremoveHeaders(String name) protected final SELFself()Returns this object cast to the self type.setContent(String value) Sets the body on this response.setContent(HttpEntity value) Sets the body on this response.voidsetEntity(HttpEntity entity) voidvoidsetHeader2(String name, String value) Sets the specified header to the end of the headers in this builder.setHeader2(Header value) Sets the specified header to the end of the headers in this builder.setHeaders(List<Header> values) Sets the specified headers to the end of the headers in this builder.voidsetHeaders(Header[] values) setHeaders(HeaderList value) Sets the specified headers on this response.setHeaders2(Header... values) Sets the specified headers to the end of the headers in this builder.voidsetLocale2(Locale value) Sets the locale used to retrieve reason phrases.setLocation(String value) Specifies the value for theLocation header.setLocation(URI value) Specifies the value for theLocation header.voidsetParams(HttpParams params) Sets the protocol version on the status line.voidsetReasonPhrase(String reason) setReasonPhrase2(String value) Sets the reason phrase on the status line.Sets the reason phrase catalog used to retrieve reason phrases.voidsetStatusCode(int code) setStatusCode2(int value) Sets the status code on the status line.voidsetStatusLine(ProtocolVersion ver, int code) voidsetStatusLine(ProtocolVersion ver, int code, String reason) voidsetStatusLine(StatusLine value) setStatusLine(BasicStatusLine value) Sets the protocol version on the status line.toString()abstract SELFReturns an unmodifiable snapshot of this bean.
-
Constructor Details
-
BasicHttpResponse
Copy constructor.- Parameters:
copyFrom- The bean to copy from. Must not benull .
-
BasicHttpResponse
Constructor.- Parameters:
statusLine- The HTTP status line. Must not benull .
-
BasicHttpResponse
Constructor.This is the constructor used when parsing an HTTP response.
- Parameters:
response- The HTTP response to copy from. Must not benull .
-
-
Method Details
-
addHeader
- Specified by:
addHeaderin interfaceHttpMessage
-
addHeader
- Specified by:
addHeaderin interfaceHttpMessage
-
containsHeader
- Specified by:
containsHeaderin interfaceHttpMessage
-
getAllHeaders
- Specified by:
getAllHeadersin interfaceHttpMessage
-
getEntity
- Specified by:
getEntityin interfaceHttpResponse
-
getFirstHeader
- Specified by:
getFirstHeaderin interfaceHttpMessage
-
getHeaders
Returns access to the underlying builder for the headers.- Returns:
- The underlying builder for the headers.
-
getHeaders
- Specified by:
getHeadersin interfaceHttpMessage
-
getLastHeader
- Specified by:
getLastHeaderin interfaceHttpMessage
-
getLocale
- Specified by:
getLocalein interfaceHttpResponse
-
getParams
- Specified by:
getParamsin interfaceHttpMessage
-
getProtocolVersion
- Specified by:
getProtocolVersionin interfaceHttpMessage
-
getStatusLine
- Specified by:
getStatusLinein interfaceHttpResponse
-
headerIterator
- Specified by:
headerIteratorin interfaceHttpMessage
-
headerIterator
- Specified by:
headerIteratorin interfaceHttpMessage
-
isUnmodifiable
Returnstrue if this bean is unmodifiable.- Returns:
true if this bean is anUnmodifiableBeansnapshot.
-
removeHeader
- Specified by:
removeHeaderin interfaceHttpMessage
-
removeHeaders
- Specified by:
removeHeadersin interfaceHttpMessage
-
setContent
Sets the body on this response.- Parameters:
value- The body on this response. Can benull to unset the property.- Returns:
- This object.
-
setContent
Sets the body on this response.- Parameters:
value- The body on this response. Can benull (treated as an empty string).- Returns:
- This object.
-
setEntity
- Specified by:
setEntityin interfaceHttpResponse
-
setHeader
- Specified by:
setHeaderin interfaceHttpMessage
-
setHeader
- Specified by:
setHeaderin interfaceHttpMessage
-
setHeader2
Sets the specified header to the end of the headers in this builder.- Parameters:
value- The header to add.null values are ignored.- Returns:
- This object.
-
setHeader2
Sets the specified header to the end of the headers in this builder.- Parameters:
name- The header name.value- The header value.- Returns:
- This object.
-
setHeaders
- Specified by:
setHeadersin interfaceHttpMessage
-
setHeaders
Sets the specified headers on this response.- Parameters:
value- The new value. Must not benull .- Returns:
- This object.
-
setHeaders
Sets the specified headers to the end of the headers in this builder.- Parameters:
values- The headers to add.null values are ignored.- Returns:
- This object.
-
setHeaders2
Sets the specified headers to the end of the headers in this builder.- Parameters:
values- The headers to add.null values are ignored.- Returns:
- This object.
-
setLocale
- Specified by:
setLocalein interfaceHttpResponse
-
setLocale2
Sets the locale used to retrieve reason phrases.If not specified, uses
Locale.getDefault().- Parameters:
value- The new value. Can benull . The effect is implementation-dependent, depending on the configuredReasonPhraseCatalog(e.g. ignored byEnglishReasonPhraseCatalog).- Returns:
- This object.
-
setLocation
Specifies the value for theLocation header.- Parameters:
value- The new header location. Can benull (no-op; the header is left unchanged).- Returns:
- This object.
-
setLocation
Specifies the value for theLocation header.- Parameters:
value- The new header location. Can benull (no-op; the header is left unchanged).- Returns:
- This object.
-
setParams
- Specified by:
setParamsin interfaceHttpMessage
-
setProtocolVersion
Sets the protocol version on the status line.If not specified,
"HTTP/1.1" will be used.- Parameters:
value- The new value. Can benull , in which case the default protocol version is cleared andBasicStatusLine.getProtocolVersion()returnsnull .- Returns:
- This object.
-
setReasonPhrase
- Specified by:
setReasonPhrasein interfaceHttpResponse- Throws:
IllegalStateException
-
setReasonPhrase2
Sets the reason phrase on the status line.If not specified, the reason phrase will be retrieved from the reason phrase catalog using the locale on this builder.
- Parameters:
value- The new value. Can benull to fall back to the reason phrase catalog.- Returns:
- This object.
-
setReasonPhraseCatalog
Sets the reason phrase catalog used to retrieve reason phrases.If not specified, uses
EnglishReasonPhraseCatalog.- Parameters:
value- The new value. Can benull to fall back toEnglishReasonPhraseCatalog.INSTANCE.- Returns:
- This object.
-
setStatusCode
- Specified by:
setStatusCodein interfaceHttpResponse- Throws:
IllegalStateException
-
setStatusCode2
Sets the status code on the status line.If not specified,
0 will be used.- Parameters:
value- The new value.- Returns:
- This object.
-
setStatusLine
Sets the protocol version on the status line.If not specified,
"HTTP/1.1" will be used.- Parameters:
value- The new value. Must not benull .- Returns:
- This object.
-
setStatusLine
- Specified by:
setStatusLinein interfaceHttpResponse
-
setStatusLine
- Specified by:
setStatusLinein interfaceHttpResponse
-
setStatusLine
- Specified by:
setStatusLinein interfaceHttpResponse
-
unmodifiable
Returns an unmodifiable snapshot of this bean.The returned instance is a point-in-time copy of the leaf's nested
Unmodifiabletype; any attempt to set a property on it throws anUnsupportedOperationException. This method is idempotent: if this bean is already unmodifiable it returns itself rather than taking another snapshot. The receiver is left unchanged (and still modifiable unless it was already unmodifiable).- Returns:
- An unmodifiable snapshot of this bean, or this bean if it is already unmodifiable.
-
toString
-
equals
-
hashCode
-
self
Returns this object cast to the self type.- Returns:
- This object.
-
modify
Single mutation funnel — the only choke-point through which all state changes on this bean flow.Every mutator (fluent setter and
voidinterface mutator) routes through this method. The nestedUnmodifiablesnapshot overrides only this method to throw, which freezes the entire mutation surface with a single override.- Parameters:
mutation- The state change to apply.- Returns:
- This object.
-
freeze
Deep-freeze hook invoked from the nestedUnmodifiableconstructor after the snapshot copy completes.The mutable sub-beans are frozen here by direct field assignment (never via a setter, which would route through the throwing
modify(Runnable)and blow up during construction). A leaf that adds its own mutable sub-bean overrides this method (callingsuper.freeze()first). -
assertStatusCode
Asserts that the specified HTTP response has the same status code as the one on the status line of this bean.- Parameters:
response- The HTTP response to check. Must not benull .- Throws:
IllegalArgumentException- If status code is not what was expected.
-