Package javax.ws.rs.core
Class GenericEntity<T>
java.lang.Object
javax.ws.rs.core.GenericEntity<T>
Represents a response entity of a generic type
T
.
Normally type erasure removes generic type information such that a
Response
instance that contains, e.g., an entity of type
List<String>
appears to contain a raw List<?>
at runtime.
When the generic type is required to select a suitable
MessageBodyWriter
, this class may be used to wrap the entity and
capture its generic type.
There are two ways to create an instance:
- Create a (typically anonymous) subclass of this
class which enables retrieval of the type information at runtime despite
type erasure. For example, the following code shows how to create a
Response
containing an entity of typeList<String>
whose generic type will be available at runtime for selection of a suitableMessageBodyWriter
:List<String> list = new ArrayList<String>(); GenericEntity<List<String>> entity = new GenericEntity<List<String>>(list) {}; Response response = Response.ok(entity).build();
where
list
is the instance ofList<Stringinvalid input: '>'
that will form the response body and entity is an instance of an anonymous subclass ofGenericEntity
. - Create an instance directly by supplying the generic type information
with the entity. For example the following code shows how to create
a response containing the result of a method invoked via reflection:
Method method = ...; GenericEntity<Object> entity = new GenericEntity<Object>( method.invoke(...), method.getGenericReturnType()); Response response = Response.ok(entity).build();
The above obtains the generic type from the return type of the method, the raw type is the class of entity.
-
Field Summary
Fields -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
GenericEntity
(T entity) Constructs a new generic entity.GenericEntity
(T entity, Type genericType) Create a new instance of GenericEntity, supplying the generic type information. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
checkTypeCompatibility
(Class<?> c, Type t) final T
Get the enclosed entityfinal Class
<?> Gets the raw type of the enclosed entity.private static Type
getSuperclassTypeParameter
(Class<?> subclass) Returns the type from super class's type parameter.final Type
getType()
Gets underlyingType
instance.
-
Field Details
-
rawType
-
type
-
entity
-
-
Constructor Details
-
GenericEntity
Constructs a new generic entity. Derives represented class from type parameter. Note that this constructor is protected, users should create a (usually anonymous) subclass as shown above.- Parameters:
entity
- the entity instance, must not be null- Throws:
IllegalArgumentException
- if entity is null
-
GenericEntity
Create a new instance of GenericEntity, supplying the generic type information. The entity must be assignable to a variable of the supplied generic type, e.g. ifentity
is an instance ofArrayList<String>
thengenericType
could be the same or a superclass ofArrayList
with the same generic type likeList<String>
.- Parameters:
entity
- the entity instance, must not be nullgenericType
- the generic type, must not be null- Throws:
IllegalArgumentException
- if the entity is not assignable to a variable of the supplied generic type or if entity or genericType is null.
-
-
Method Details
-
checkTypeCompatibility
-
getSuperclassTypeParameter
Returns the type from super class's type parameter. -
getRawType
Gets the raw type of the enclosed entity. Note that this is the raw type of the instance, not the raw type of the type parameter. I.e. in the example in the introduction, the raw type isArrayList
notList
.- Returns:
- the raw type
-
getType
Gets underlyingType
instance. Note that this is derived from the type parameter, not the enclosed instance. I.e. in the example in the introduction, the type isList<String>
notArrayList<String>
.- Returns:
- the type
-
getEntity
Get the enclosed entity- Returns:
- the enclosed entity
-