SlideShare a Scribd company logo
Using Java to implement REST Web
Services: JAX-RS

Web Technology
2II25
Dr. Katrien Verbert
Dr. ir. Natasha Stash
Dr. George Fletcher
Restful Web Services Frameworks and APIs

• JAX-RS - The Java API for RESTful Web Services
• uses annotations to make plain old Java objects (POJOs) and
  resources available through HTTP
• Sun Reference Project: Jersey
• Other Vendors: CXF (Apache), RESTEasy(JBoss) and Restlet

• JAX-RS tutorial:
   http://docs.oracle.com/javaee/6/tutorial/doc/gilik.html
JAX-RS HTTP

• Templated mapping and subresources
   @Path
• MIME handling
   @Provides, @Consumes
• HTTP methods
   @GET, @POST, @UPDATE, @DELETE, @HEAD,
   @OPTIONS, @HttpMethod
• Caching
   evaluatePreconditions
Example
package com.sun.jersey.samples.helloworld.resources;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.Path;


// The Java class will be hosted at the URI path "/helloworld"
@Path("/helloworld")
public class HelloWorldResource {


    // The Java method will process HTTP GET requests
    @GET
    // The Java method will produce content identified by the MIME Media
    // type "text/plain"
    @Produces("text/plain")
    public String getClichedMessage() {
        // Return some cliched textual content
        return "Hello World";
    }
}
@Path Annotation and URI Path Templates

@Path annotation
    • identifies the URI path template to which the resource responds
    • is specified at the class or method level of a resource

URI path templates are URIs with variables embedded within the URI syntax
    • these variables are substituted at runtime
    • variables are denoted by braces ({ and })
         @Path("/users/{username}")
    • example request
         http://example.com/users/Galileo
@PathParam annotation

To obtain the value of the user name, the @PathParam
  annotation may be used on the method parameter of a
  request method

@Path("/users/{username}")
public class UserResource {


    @GET
    @Produces("text/xml")
    public String getUser(@PathParam("username") String userName) {
        ...
    }
}
Examples of URI Path Templates

 URI Path Template                     URI After Substitution

 http://example.com/{name1}/{name2}/   http://example.com/james/gatz/


 http://example.com/{question}/        http://example.com/why/why/why/
 {question}/{question}/

 http://example.com/maps/{location}    http://example.com/maps/Main%20Street
@Produces Annotation

@Produces annotation is used to specify the MIME media
 types or representations a resource can produce and
 send back to the client

• applied at the class level: default for all methods
• applied at the method level overrides any @Produces
  annotations applied at the class level
@produces annotation

@Path("/myResource")
@Produces("text/plain")
public class SomeResource {
    @GET
    public String doGetAsPlainText() {
        ...
    }


    @GET
    @Produces("text/html")
    public String doGetAsHtml() {
        ...
    }
}
@Consumes Annotation

@Consumes annotation is used to specify which MIME media
 types of representations a resource can accept


   @POST
   @Consumes("text/plain")
   public void postClichedMessage(String message) {
       // Store the message
   }
Develop Restful service in Netbeans




                03/28/11
Develop Restful service in Netbeans




                03/28/11
Develop Restful service in Netbeans




                03/28/11
Develop Restful service in Netbeans
package orders;
import javax.ws.rs.*;


@Path("order")
public class OrderResource {
    public OrderResource() {
    }


    @GET
    @Produces("application/xml")
    public Order getLastOrder() {
        return Orders.getLastOrder();
    }


    @PUT
    @Consumes("application/xml")
    public void putOrder(Order order) {
        Orders.setLastOrder(order);
    }
}
Develop Restful service in Netbeans
package orders;


public class Orders {


    private static Order lastOrder=new Order();


    public static Order getLastOrder() {
        return lastOrder;
    }


    public static void setLastOrder(Order lastOrder) {
        Orders.lastOrder = lastOrder;
    }




}
Deploy Restful service in Netbeans




                03/28/11
Test Restful service in Netbeans




                03/28/11
03/28/11
Testing Restful services

Netbeans test client does not work well with XML
  parameters

Better alternative:

RESTClient, a debugger for RESTful web services
https://addons.mozilla.org/nl/firefox/addon/restclient/




                      03/28/11
RESTClient




             03/28/11
Testing Restful services

If you pass XML strings as parameters, you need to specify
    this in the header




                    03/28/11
Add header parameters




              03/28/11
Add header parameters




              03/28/11
Placing an order




                   03/28/11
k.verbert@tue.nl
n.v.stash@tue.nl
g.l.fletcher@tue.nl




           03/28/11
Ad

Recommended

Introduction to RESTful Webservices in JAVA
Introduction to RESTful Webservices in JAVA
psrpatnaik
 
Developing RESTful WebServices using Jersey
Developing RESTful WebServices using Jersey
b_kathir
 
Restful web services with java
Restful web services with java
Vinay Gopinath
 
Introduction to JAX-RS
Introduction to JAX-RS
Andreas Bjärlestam
 
RESTful Web Services with JAX-RS
RESTful Web Services with JAX-RS
Carol McDonald
 
RestFull Webservices with JAX-RS
RestFull Webservices with JAX-RS
Neil Ghosh
 
RESTful Web services using JAX-RS
RESTful Web services using JAX-RS
Arun Gupta
 
Making Java REST with JAX-RS 2.0
Making Java REST with JAX-RS 2.0
Dmytro Chyzhykov
 
Overview of RESTful web services
Overview of RESTful web services
nbuddharaju
 
RESTEasy
RESTEasy
Khushbu Joshi
 
RESTful Web Services with Jersey
RESTful Web Services with Jersey
Scott Leberknight
 
Cwinters Intro To Rest And JerREST and Jersey Introductionsey
Cwinters Intro To Rest And JerREST and Jersey Introductionsey
elliando dias
 
WebLogic Developer Webcast 1: JPA 2.0
WebLogic Developer Webcast 1: JPA 2.0
Jeffrey West
 
REST & RESTful Web Service
REST & RESTful Web Service
Hoan Vu Tran
 
RESTEasy
RESTEasy
Massimiliano Dessì
 
So various polymorphism in Scala
So various polymorphism in Scala
b0ris_1
 
RESTful Web Services
RESTful Web Services
Christopher Bartling
 
Services in Drupal 8
Services in Drupal 8
Andrei Jechiu
 
Rest web services
Rest web services
Paulo Gandra de Sousa
 
Designing a RESTful web service
Designing a RESTful web service
Filip Blondeel
 
How to build a rest api.pptx
How to build a rest api.pptx
Harry Potter
 
Restful webservice
Restful webservice
Dong Ngoc
 
RESTing with JAX-RS
RESTing with JAX-RS
Ezewuzie Emmanuel Okafor
 
Consuming RESTful services in PHP
Consuming RESTful services in PHP
Zoran Jeremic
 
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
reneechemel
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
IndicThreads
 
L18 REST API Design
L18 REST API Design
Ólafur Andri Ragnarsson
 
Easy rest service using PHP reflection api
Easy rest service using PHP reflection api
Matthieu Aubry
 
Scalableenterpriseapplicationswith jee7andbeyond
Scalableenterpriseapplicationswith jee7andbeyond
Andy Moncsek
 
What’s new in Java SE, EE, ME, Embedded world & new Strategy
What’s new in Java SE, EE, ME, Embedded world & new Strategy
Mohamed Taman
 

More Related Content

What's hot (20)

Overview of RESTful web services
Overview of RESTful web services
nbuddharaju
 
RESTEasy
RESTEasy
Khushbu Joshi
 
RESTful Web Services with Jersey
RESTful Web Services with Jersey
Scott Leberknight
 
Cwinters Intro To Rest And JerREST and Jersey Introductionsey
Cwinters Intro To Rest And JerREST and Jersey Introductionsey
elliando dias
 
WebLogic Developer Webcast 1: JPA 2.0
WebLogic Developer Webcast 1: JPA 2.0
Jeffrey West
 
REST & RESTful Web Service
REST & RESTful Web Service
Hoan Vu Tran
 
RESTEasy
RESTEasy
Massimiliano Dessì
 
So various polymorphism in Scala
So various polymorphism in Scala
b0ris_1
 
RESTful Web Services
RESTful Web Services
Christopher Bartling
 
Services in Drupal 8
Services in Drupal 8
Andrei Jechiu
 
Rest web services
Rest web services
Paulo Gandra de Sousa
 
Designing a RESTful web service
Designing a RESTful web service
Filip Blondeel
 
How to build a rest api.pptx
How to build a rest api.pptx
Harry Potter
 
Restful webservice
Restful webservice
Dong Ngoc
 
RESTing with JAX-RS
RESTing with JAX-RS
Ezewuzie Emmanuel Okafor
 
Consuming RESTful services in PHP
Consuming RESTful services in PHP
Zoran Jeremic
 
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
reneechemel
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
IndicThreads
 
L18 REST API Design
L18 REST API Design
Ólafur Andri Ragnarsson
 
Easy rest service using PHP reflection api
Easy rest service using PHP reflection api
Matthieu Aubry
 
Overview of RESTful web services
Overview of RESTful web services
nbuddharaju
 
RESTful Web Services with Jersey
RESTful Web Services with Jersey
Scott Leberknight
 
Cwinters Intro To Rest And JerREST and Jersey Introductionsey
Cwinters Intro To Rest And JerREST and Jersey Introductionsey
elliando dias
 
WebLogic Developer Webcast 1: JPA 2.0
WebLogic Developer Webcast 1: JPA 2.0
Jeffrey West
 
REST & RESTful Web Service
REST & RESTful Web Service
Hoan Vu Tran
 
So various polymorphism in Scala
So various polymorphism in Scala
b0ris_1
 
Services in Drupal 8
Services in Drupal 8
Andrei Jechiu
 
Designing a RESTful web service
Designing a RESTful web service
Filip Blondeel
 
How to build a rest api.pptx
How to build a rest api.pptx
Harry Potter
 
Restful webservice
Restful webservice
Dong Ngoc
 
Consuming RESTful services in PHP
Consuming RESTful services in PHP
Zoran Jeremic
 
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
reneechemel
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
IndicThreads
 
Easy rest service using PHP reflection api
Easy rest service using PHP reflection api
Matthieu Aubry
 

Viewers also liked (20)

Scalableenterpriseapplicationswith jee7andbeyond
Scalableenterpriseapplicationswith jee7andbeyond
Andy Moncsek
 
What’s new in Java SE, EE, ME, Embedded world & new Strategy
What’s new in Java SE, EE, ME, Embedded world & new Strategy
Mohamed Taman
 
Server-Side Programming Primer
Server-Side Programming Primer
Ivano Malavolta
 
Java colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rs
Sagara Gunathunga
 
Overview of web services
Overview of web services
People Strategists
 
JAX-RS 2.0: RESTful Web Services
JAX-RS 2.0: RESTful Web Services
Arun Gupta
 
Web services
Web services
Peter R. Egli
 
Java web services using JAX-WS
Java web services using JAX-WS
IndicThreads
 
SOAP-based Web Services
SOAP-based Web Services
Katrien Verbert
 
Adopt-a-jsr Mar 1 2017 JAX-RS update
Adopt-a-jsr Mar 1 2017 JAX-RS update
Pavel Bucek
 
Restful Web Services
Restful Web Services
Angelin R
 
Webservices
Webservices
Gerard Sylvester
 
Web Services Tutorial
Web Services Tutorial
Lorna Mitchell
 
Web service introduction
Web service introduction
Sagara Gunathunga
 
Web servers
Web servers
webhostingguy
 
Web Service Presentation
Web Service Presentation
guest0df6b0
 
REST & RESTful Web Services
REST & RESTful Web Services
Halil Burak Cetinkaya
 
JAX RS 2.0 - OTN Bangalore 2013
JAX RS 2.0 - OTN Bangalore 2013
Jagadish Prasath
 
Getting Started with WebSocket and Server-Sent Events using Java - Arun Gupta...
Getting Started with WebSocket and Server-Sent Events using Java - Arun Gupta...
jaxLondonConference
 
Testing web services
Testing web services
Taras Lytvyn
 
Scalableenterpriseapplicationswith jee7andbeyond
Scalableenterpriseapplicationswith jee7andbeyond
Andy Moncsek
 
What’s new in Java SE, EE, ME, Embedded world & new Strategy
What’s new in Java SE, EE, ME, Embedded world & new Strategy
Mohamed Taman
 
Server-Side Programming Primer
Server-Side Programming Primer
Ivano Malavolta
 
Java colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rs
Sagara Gunathunga
 
JAX-RS 2.0: RESTful Web Services
JAX-RS 2.0: RESTful Web Services
Arun Gupta
 
Java web services using JAX-WS
Java web services using JAX-WS
IndicThreads
 
Adopt-a-jsr Mar 1 2017 JAX-RS update
Adopt-a-jsr Mar 1 2017 JAX-RS update
Pavel Bucek
 
Restful Web Services
Restful Web Services
Angelin R
 
Web Service Presentation
Web Service Presentation
guest0df6b0
 
JAX RS 2.0 - OTN Bangalore 2013
JAX RS 2.0 - OTN Bangalore 2013
Jagadish Prasath
 
Getting Started with WebSocket and Server-Sent Events using Java - Arun Gupta...
Getting Started with WebSocket and Server-Sent Events using Java - Arun Gupta...
jaxLondonConference
 
Testing web services
Testing web services
Taras Lytvyn
 
Ad

Similar to Using Java to implement RESTful Web Services: JAX-RS (20)

CDI, Seam & RESTEasy: You haven't seen REST yet!
CDI, Seam & RESTEasy: You haven't seen REST yet!
Dan Allen
 
Eclipse Day India 2015 - Rest with Java (jax rs) and jersey
Eclipse Day India 2015 - Rest with Java (jax rs) and jersey
Eclipse Day India
 
Rest with java (jax rs) and jersey and swagger
Rest with java (jax rs) and jersey and swagger
Kumaraswamy M
 
JAX-RS 2.0 and OData
JAX-RS 2.0 and OData
Anil Allewar
 
Building Restful Web Services with Java
Building Restful Web Services with Java
Vassil Popovski
 
Spark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RS
Arun Gupta
 
REST made simple with Java
REST made simple with Java
Niklas Gustavsson
 
03 form-data
03 form-data
snopteck
 
Rest services with Jax-rs
Rest services with Jax-rs
Guddu Spy
 
May 2010 - RestEasy
May 2010 - RestEasy
JBug Italy
 
JAX-RS Creating RESTFul services
JAX-RS Creating RESTFul services
Ludovic Champenois
 
WhatsNewNIO2.pdf
WhatsNewNIO2.pdf
Mohit Kumar
 
RESTful application with JAX-RS and how to expose and test them
RESTful application with JAX-RS and how to expose and test them
Kumaraswamy M
 
Boost Your Environment With XMLDB - UKOUG 2008 - Marco Gralike
Boost Your Environment With XMLDB - UKOUG 2008 - Marco Gralike
Marco Gralike
 
JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011
Shreedhar Ganapathy
 
How to connect redis and mule esb using spring data redis module
How to connect redis and mule esb using spring data redis module
Priyobroto Ghosh (Mule ESB Certified)
 
Power tools in Java
Power tools in Java
DPC Consulting Ltd
 
Ppt on web development and this has all details
Ppt on web development and this has all details
gogijoshiajmer
 
SCDJWS 5. JAX-WS
SCDJWS 5. JAX-WS
Francesco Ierna
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
Ajax Experience 2009
 
CDI, Seam & RESTEasy: You haven't seen REST yet!
CDI, Seam & RESTEasy: You haven't seen REST yet!
Dan Allen
 
Eclipse Day India 2015 - Rest with Java (jax rs) and jersey
Eclipse Day India 2015 - Rest with Java (jax rs) and jersey
Eclipse Day India
 
Rest with java (jax rs) and jersey and swagger
Rest with java (jax rs) and jersey and swagger
Kumaraswamy M
 
JAX-RS 2.0 and OData
JAX-RS 2.0 and OData
Anil Allewar
 
Building Restful Web Services with Java
Building Restful Web Services with Java
Vassil Popovski
 
Spark IT 2011 - Developing RESTful Web services with JAX-RS
Spark IT 2011 - Developing RESTful Web services with JAX-RS
Arun Gupta
 
03 form-data
03 form-data
snopteck
 
Rest services with Jax-rs
Rest services with Jax-rs
Guddu Spy
 
May 2010 - RestEasy
May 2010 - RestEasy
JBug Italy
 
JAX-RS Creating RESTFul services
JAX-RS Creating RESTFul services
Ludovic Champenois
 
WhatsNewNIO2.pdf
WhatsNewNIO2.pdf
Mohit Kumar
 
RESTful application with JAX-RS and how to expose and test them
RESTful application with JAX-RS and how to expose and test them
Kumaraswamy M
 
Boost Your Environment With XMLDB - UKOUG 2008 - Marco Gralike
Boost Your Environment With XMLDB - UKOUG 2008 - Marco Gralike
Marco Gralike
 
JAX-RS JavaOne Hyderabad, India 2011
JAX-RS JavaOne Hyderabad, India 2011
Shreedhar Ganapathy
 
Ppt on web development and this has all details
Ppt on web development and this has all details
gogijoshiajmer
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
Ajax Experience 2009
 
Ad

More from Katrien Verbert (20)

Explainability methods
Explainability methods
Katrien Verbert
 
Human-centered AI: how can we support end-users to interact with AI?
Human-centered AI: how can we support end-users to interact with AI?
Katrien Verbert
 
Human-centered AI: how can we support end-users to interact with AI?
Human-centered AI: how can we support end-users to interact with AI?
Katrien Verbert
 
Human-centered AI: how can we support lay users to understand AI?
Human-centered AI: how can we support lay users to understand AI?
Katrien Verbert
 
Explaining job recommendations: a human-centred perspective
Explaining job recommendations: a human-centred perspective
Katrien Verbert
 
Explaining recommendations: design implications and lessons learned
Explaining recommendations: design implications and lessons learned
Katrien Verbert
 
Designing Learning Analytics Dashboards: Lessons Learned
Designing Learning Analytics Dashboards: Lessons Learned
Katrien Verbert
 
Human-centered AI: towards the next generation of interactive and adaptive ex...
Human-centered AI: towards the next generation of interactive and adaptive ex...
Katrien Verbert
 
Explainable AI for non-expert users
Explainable AI for non-expert users
Katrien Verbert
 
Towards the next generation of interactive and adaptive explanation methods
Towards the next generation of interactive and adaptive explanation methods
Katrien Verbert
 
Personalized food recommendations: combining recommendation, visualization an...
Personalized food recommendations: combining recommendation, visualization an...
Katrien Verbert
 
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
Katrien Verbert
 
Learning analytics for feedback at scale
Learning analytics for feedback at scale
Katrien Verbert
 
Interactive recommender systems and dashboards for learning
Interactive recommender systems and dashboards for learning
Katrien Verbert
 
Interactive recommender systems: opening up the “black box”
Interactive recommender systems: opening up the “black box”
Katrien Verbert
 
Interactive Recommender Systems
Interactive Recommender Systems
Katrien Verbert
 
Web Information Systems Lecture 2: HTML
Web Information Systems Lecture 2: HTML
Katrien Verbert
 
Information Visualisation: perception and principles
Information Visualisation: perception and principles
Katrien Verbert
 
Web Information Systems Lecture 1: Introduction
Web Information Systems Lecture 1: Introduction
Katrien Verbert
 
Information Visualisation: Introduction
Information Visualisation: Introduction
Katrien Verbert
 
Human-centered AI: how can we support end-users to interact with AI?
Human-centered AI: how can we support end-users to interact with AI?
Katrien Verbert
 
Human-centered AI: how can we support end-users to interact with AI?
Human-centered AI: how can we support end-users to interact with AI?
Katrien Verbert
 
Human-centered AI: how can we support lay users to understand AI?
Human-centered AI: how can we support lay users to understand AI?
Katrien Verbert
 
Explaining job recommendations: a human-centred perspective
Explaining job recommendations: a human-centred perspective
Katrien Verbert
 
Explaining recommendations: design implications and lessons learned
Explaining recommendations: design implications and lessons learned
Katrien Verbert
 
Designing Learning Analytics Dashboards: Lessons Learned
Designing Learning Analytics Dashboards: Lessons Learned
Katrien Verbert
 
Human-centered AI: towards the next generation of interactive and adaptive ex...
Human-centered AI: towards the next generation of interactive and adaptive ex...
Katrien Verbert
 
Explainable AI for non-expert users
Explainable AI for non-expert users
Katrien Verbert
 
Towards the next generation of interactive and adaptive explanation methods
Towards the next generation of interactive and adaptive explanation methods
Katrien Verbert
 
Personalized food recommendations: combining recommendation, visualization an...
Personalized food recommendations: combining recommendation, visualization an...
Katrien Verbert
 
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
Katrien Verbert
 
Learning analytics for feedback at scale
Learning analytics for feedback at scale
Katrien Verbert
 
Interactive recommender systems and dashboards for learning
Interactive recommender systems and dashboards for learning
Katrien Verbert
 
Interactive recommender systems: opening up the “black box”
Interactive recommender systems: opening up the “black box”
Katrien Verbert
 
Interactive Recommender Systems
Interactive Recommender Systems
Katrien Verbert
 
Web Information Systems Lecture 2: HTML
Web Information Systems Lecture 2: HTML
Katrien Verbert
 
Information Visualisation: perception and principles
Information Visualisation: perception and principles
Katrien Verbert
 
Web Information Systems Lecture 1: Introduction
Web Information Systems Lecture 1: Introduction
Katrien Verbert
 
Information Visualisation: Introduction
Information Visualisation: Introduction
Katrien Verbert
 

Using Java to implement RESTful Web Services: JAX-RS

  • 1. Using Java to implement REST Web Services: JAX-RS Web Technology 2II25 Dr. Katrien Verbert Dr. ir. Natasha Stash Dr. George Fletcher
  • 2. Restful Web Services Frameworks and APIs • JAX-RS - The Java API for RESTful Web Services • uses annotations to make plain old Java objects (POJOs) and resources available through HTTP • Sun Reference Project: Jersey • Other Vendors: CXF (Apache), RESTEasy(JBoss) and Restlet • JAX-RS tutorial: http://docs.oracle.com/javaee/6/tutorial/doc/gilik.html
  • 3. JAX-RS HTTP • Templated mapping and subresources @Path • MIME handling @Provides, @Consumes • HTTP methods @GET, @POST, @UPDATE, @DELETE, @HEAD, @OPTIONS, @HttpMethod • Caching evaluatePreconditions
  • 4. Example package com.sun.jersey.samples.helloworld.resources; import javax.ws.rs.GET; import javax.ws.rs.Produces; import javax.ws.rs.Path; // The Java class will be hosted at the URI path "/helloworld" @Path("/helloworld") public class HelloWorldResource { // The Java method will process HTTP GET requests @GET // The Java method will produce content identified by the MIME Media // type "text/plain" @Produces("text/plain") public String getClichedMessage() { // Return some cliched textual content return "Hello World"; } }
  • 5. @Path Annotation and URI Path Templates @Path annotation • identifies the URI path template to which the resource responds • is specified at the class or method level of a resource URI path templates are URIs with variables embedded within the URI syntax • these variables are substituted at runtime • variables are denoted by braces ({ and }) @Path("/users/{username}") • example request http://example.com/users/Galileo
  • 6. @PathParam annotation To obtain the value of the user name, the @PathParam annotation may be used on the method parameter of a request method @Path("/users/{username}") public class UserResource { @GET @Produces("text/xml") public String getUser(@PathParam("username") String userName) { ... } }
  • 7. Examples of URI Path Templates URI Path Template URI After Substitution http://example.com/{name1}/{name2}/ http://example.com/james/gatz/ http://example.com/{question}/ http://example.com/why/why/why/ {question}/{question}/ http://example.com/maps/{location} http://example.com/maps/Main%20Street
  • 8. @Produces Annotation @Produces annotation is used to specify the MIME media types or representations a resource can produce and send back to the client • applied at the class level: default for all methods • applied at the method level overrides any @Produces annotations applied at the class level
  • 9. @produces annotation @Path("/myResource") @Produces("text/plain") public class SomeResource { @GET public String doGetAsPlainText() { ... } @GET @Produces("text/html") public String doGetAsHtml() { ... } }
  • 10. @Consumes Annotation @Consumes annotation is used to specify which MIME media types of representations a resource can accept @POST @Consumes("text/plain") public void postClichedMessage(String message) { // Store the message }
  • 11. Develop Restful service in Netbeans 03/28/11
  • 12. Develop Restful service in Netbeans 03/28/11
  • 13. Develop Restful service in Netbeans 03/28/11
  • 14. Develop Restful service in Netbeans package orders; import javax.ws.rs.*; @Path("order") public class OrderResource { public OrderResource() { } @GET @Produces("application/xml") public Order getLastOrder() { return Orders.getLastOrder(); } @PUT @Consumes("application/xml") public void putOrder(Order order) { Orders.setLastOrder(order); } }
  • 15. Develop Restful service in Netbeans package orders; public class Orders { private static Order lastOrder=new Order(); public static Order getLastOrder() { return lastOrder; } public static void setLastOrder(Order lastOrder) { Orders.lastOrder = lastOrder; } }
  • 16. Deploy Restful service in Netbeans 03/28/11
  • 17. Test Restful service in Netbeans 03/28/11
  • 19. Testing Restful services Netbeans test client does not work well with XML parameters Better alternative: RESTClient, a debugger for RESTful web services https://addons.mozilla.org/nl/firefox/addon/restclient/ 03/28/11
  • 20. RESTClient 03/28/11
  • 21. Testing Restful services If you pass XML strings as parameters, you need to specify this in the header 03/28/11
  • 24. Placing an order 03/28/11

Editor's Notes

  • #4: helloworld
  • #11: The @Consumes annotation is used to specify which MIME media types of representations a resource can accept, or consume, from the client. If @Consumes is applied at the class level, all the response methods accept the specified MIME types by default. If applied at the method level, @Consumes overrides any @Consumes annotations applied at the class level.If a resource is unable to consume the MIME type of a client request, the JAX-RS runtime sends back an HTTP 415 ( “ Unsupported Media Type ” ) error.The value of @Consumes is an array of String of acceptable MIME types. For example:@Consumes({"text/plain,text/html"})The following example shows how to apply @Consumes at both the class and method levels:@Path("/myResource")@Consumes("multipart/related")public class SomeResource { @POST public String doPost(MimeMultipart mimeMultipartData) { ... } @POST @Consumes("application/x-www-form-urlencoded") public String doPost2(FormURLEncodedProperties formData) { ... }}The doPost method defaults to the MIME media type of the @Consumes annotation at the class level. The doPost2 method overrides the class level @Consumes annotation to specify that it can accept URL-encoded form data.If no resource methods can respond to the requested MIME type, an HTTP 415 ( “ Unsupported Media Type ” ) error is returned to the client.The HelloWorld example discussed previously in this section can be modified to set the message by using @Consumes, as shown in the following code example:@POST@Consumes("text/plain")public void postClichedMessage(String message) { // Store the message}In this example, the Java method will consume representations identified by the MIME media type text/plain. Note that the resource method returns void. This means that no representation is returned and that a response with a status code of HTTP 204 ( “ No Content ” ) will be returned.