groovyx.net.http.ContentType Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of http-builder Show documentation
Show all versions of http-builder Show documentation
A builder-style HTTP client API, including authentication, and extensible
handling of common content-types such as JSON and XML. It is built on top of
Apache's HttpClient.
/*
* Copyright 2008-2011 Thomas Nichols. http://blog.thomnichols.org
*
* 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
*
* http://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.
*
* You are receiving this code free of charge, which represents many hours of
* effort from other individuals and corporations. As a responsible member
* of the community, you are encouraged (but not required) to donate any
* enhancements or improvements back to the community under a similar open
* source license. Thank you. -TMN
*/
package groovyx.net.http;
import java.util.Iterator;
import org.apache.commons.collections.iterators.ArrayIterator;
/**
* Enumeration of common IANA
* content-types. This may be used to specify a request or response
* content-type more easily than specifying the full string each time. i.e.
*
* http.request( GET, JSON ) {...}
*
* Is roughly equivalent to:
*
* http.request( GET, 'application/json' )
*
* The only difference being, equivalent content-types (i.e.
* application/xml
and text/xml
are all added to the
* request's Accept
header. By default, all equivalent content-types
* are handled the same by the {@link EncoderRegistry} and {@link ParserRegistry}
* as well.
* @author Tom Nichols
*/
public enum ContentType {
/** */*
*/
ANY("*/*"),
/** text/plain
*/
TEXT("text/plain"),
/**
*
* application/json
* application/javascript
* text/javascript
*
*/
JSON("application/json","application/javascript","text/javascript"),
/**
*
* application/xml
* text/xml
* application/xhtml+xml
* application/atom+xml
*
*/
XML("application/xml","text/xml","application/xhtml+xml","application/atom+xml"),
/** text/html
*/
HTML("text/html"),
/** application/x-www-form-urlencoded
*/
URLENC("application/x-www-form-urlencoded"),
/** application/octet-stream
*/
BINARY("application/octet-stream");
private final String[] ctStrings;
public String[] getContentTypeStrings() { return ctStrings; }
@Override public String toString() { return ctStrings[0]; }
/**
* Builds a string to be used as an HTTP Accept
header
* value, i.e. "application/xml, text/xml"
* @return
*/
@SuppressWarnings("unchecked")
public String getAcceptHeader() {
Iterator iter = new ArrayIterator(ctStrings);
StringBuilder sb = new StringBuilder();
while ( iter.hasNext() ) {
sb.append( iter.next() );
if ( iter.hasNext() ) sb.append( ", " );
}
return sb.toString();
}
private ContentType( String... contentTypes ) {
this.ctStrings = contentTypes;
}
}