Java Reference
In-Depth Information
Chapter 6. JAX-RS Content Handlers
In the last chapter, we focused on injecting information from the header of an HTTP request.
In this chapter, we will focus on the message body of an HTTP request and response. In the
examples in previous chapters, we used low-level streaming to read in requests and write out
responses. To make things easier, JAX-RS also allows you to marshal message bodies to and
from specific Java types. It has a number of built-in providers, but you can also write and
plug in your own providers. Let's look at them all.
Built-in Content Marshalling
JAX-RS has a bunch of built-in handlers that can marshal to and from a few different specif-
ic Java types. While most are low-level conversions, they can still be useful to your JAX-RS
classes.
javax.ws.rs.core.StreamingOutput
simple callback interface that you implement when you want to do raw streaming of re-
sponse bodies:
public
public interface
interface
StreamingOutput
StreamingOutput
{
void
void
write
(
OutputStream output
)
throws
throws
IOException
,
WebApplicationException
;
}
You allocate implemented instances of this interface and return them from your JAX-RS re-
source methods. When the JAX-RS runtime is ready to write the response body of the mes-
sage, the
write()
method is invoked on the
StreamingOutput
instance. Let's look at an ex-
ample:
@Path
(
"/myservice"
)
public
public class
class
MyService
MyService
{
@GET
@Produces
(
"text/plain"
)
StreamingOutput
get
() {
return
return new
new
StreamingOutput
() {
public
public
void
throws
IOException
,
WebApplicationException
{
output
.
write
(
"hello world"
.
getBytes
());
void
write
(
OutputStream output
)
throws
}