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
We were first introduced to StreamingOutput back in Chapter 3 . StreamingOutput is a
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
}
Search WWH ::




Custom Search