Java Reference
In-Depth Information
Chapter 23. Examples for
Chapter 9
data formats from the same URL using the
Accept
header. You also learned that JAX-RS
takes the
Accept
header into account when deciding how to dispatch an HTTP request to a
Java method. In this chapter, you'll see two different examples that show how JAX-RS and
HTTP conneg can work together.
Example ex09_1: Conneg with JAX-RS
This example is a slight modification from
ex06_1
and shows two different concepts. First,
the same JAX-RS resource method can process two different media types.
Chapter 9
gives
the example of a method that returns a JAXB annotated class instance that can be returned as
either JSON or XML. We've implemented this in
ex09_1
by slightly changing the
Cus-
tomerResource.getCustomer()
method:
src/main/java/com/restfully/shop/services/CustomerResource.java
@Path
(
"/customers"
)
public
public class
class
CustomerResource
CustomerResource
{
...
@GET
@Path
(
"{id}"
)
@Produces
({
"application/xml"
,
"application/json"
})
public
public
Customer
getCustomer
(
@PathParam
(
"id"
)
int
int
id
)
{
...
}
The JAXB provider that comes with RESTEasy can convert JAXB objects to JSON or XML.
In this example, we have added the media type
application/json
to
getCustomer()
's
@Produces
annotation. The JAX-RS runtime will process the
Accept
header and pick the ap-
propriate media type of the response for
getCustomer()
. If the
Accept
header is
applica-
tion/xml
, XML will be produced. If the
Accept
header is JSON, the
Customer
object will
be outputted as JSON.
The second concept being highlighted here is that you can use the
@Produces
annotation to
dispatch to different Java methods. To illustrate this, we've added the
getCustomer-
String()
method, which processes the same URL as
getCustomer()
but for a different me-
dia type: