RESTEasy hello world example
RESTEasy, JBoss project, implementation of the JAX-RS specification. In this tutorial, we show you how to use RESTEasy framework to create a simple REST style web application.
Technologies and Tools used in this article:
- RESTEasy 2.2.1.GA
- JDK 1.6
- Maven 3.0.3
- Eclipse 3.6
1. Directory Structure
Review final directory structure of this tutorial. Just a standard web project structure.

2. Standard Web Project
Create a standard Maven web project structure.
mvn archetype:generate -DgroupId=com.mkyong.common -DartifactId=RESTfulExample -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
Convert to Eclipse web project.
mvn eclipse:eclipse -Dwtpversion=2.0
3. Project Dependencies
Declares JBoss public Maven repository and “resteasy-jaxrs” in your Maven pom.xml file. That’s all you need to use RESTEasy.
File : pom.xml
<project ..."> <repositories> <repository> <id>JBoss repository</id> <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>2.2.1.GA</version> </dependency> </dependencies> </project>
4. REST Service
A simple REST service. See demo at the end of the article, it should be self-explanatory.
package com.mkyong.rest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; @Path("/message") public class MessageRestService { @GET @Path("/{param}") public Response printMessage(@PathParam("param") String msg) { String result = "Restful example : " + msg; return Response.status(200).entity(result).build(); } }
5. web.xml
Now, configure listener and servlet to support RESTEasy. Read this JBoss documentation for detail explanation.
File : web.xml
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Restful Web Application</display-name> <!-- Auto scan REST service --> <context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param> <!-- this need same with resteasy servlet url-pattern --> <context-param> <param-name>resteasy.servlet.mapping.prefix</param-name> <param-value>/rest</param-value> </context-param> <listener> <listener-class> org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap </listener-class> </listener> <servlet> <servlet-name>resteasy-servlet</servlet-name> <servlet-class> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher </servlet-class> </servlet> <servlet-mapping> <servlet-name>resteasy-servlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app>
You need to set the “resteasy.servlet.mapping.prefix” if your servlet-mapping for the resteasy servlet has a url-pattern other than “/*“.
In above example, the resteasy servlet url-pattern is “/rest/*“, so you have to set the “resteasy.servlet.mapping.prefix” to “/rest” as well, otherwise, you will hit resource not found error message.
Remember to set “resteasy.scan” to true, so that RESTEasy will find and register your REST service automatically.
6. Demo
In this example, web request from “projectURL/rest/message/” will match to “MessageRestService“, and “projectURL/rest/message/{any values}” will match to @PathParam parameter.
Test 1 : http://localhost:8080/RESTfulExample/rest/message/mkyong

Test 2 : http://localhost:8080/RESTfulExample/rest/message/hello%20world

Alternative REST Service Registration
In above example, you are register REST service via “ResteasyBootstrap” listener. Here i show you another way.
Create a class and extends javax.ws.rs.core.Application, and add your REST service manually.
package com.mkyong.app; import java.util.HashSet; import java.util.Set; import javax.ws.rs.core.Application; import com.mkyong.rest.MessageRestService; public class MessageApplication extends Application { private Set<Object> singletons = new HashSet<Object>(); public MessageApplication() { singletons.add(new MessageRestService()); } @Override public Set<Object> getSingletons() { return singletons; } }
File : web.xml , no more listener, configure your application class like below :
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Restful Web Application</display-name> <context-param> <param-name>resteasy.servlet.mapping.prefix</param-name> <param-value>/rest</param-value> </context-param> <servlet> <servlet-name>resteasy-servlet</servlet-name> <servlet-class> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher </servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.mkyong.app.MessageApplication</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>resteasy-servlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app>
Done.
Download Source Code
References
- RESTEasy Framework
- RESTEasy installation and configuration
- IBM : RESTful Web services: The basics
- RESTful Web Services
- Wiki : Representational State Transfer

Thanks for this. It worked fine for me.
In case anyone wants to build the war using gradle rather than maven create the following build.gradle file and add this to it:
apply plugin: ‘java’
apply plugin: ‘war’
repositories {
mavenCentral()
}
dependencies {
providedCompile ‘javax.servlet:servlet-api:2.5′
compile ‘javax:javaee-web-api:6.0′
runtime ‘javax.servlet:jstl:1.1.2′
}
Then the command ‘gradle build’ will create the war file in the directory build/libs
Is it possible to have multiple prefixes
like /rest /core
Hi,
Do you have a tutorial to setup RESTEasy on Tomcat and not on JBoss AS?
Thanks,
Ravi
Well, got it working by simple dropping the war into tomcat’s webapps dir. I thought we had to do something extra for configuring and using resteasy when not using with jboss AS.
Hi,
I have deployed the application in Tomcat6.0 , while running the application
i am getting below error
ERROR:”HTTP Status 500 – Wrapper cannot find servlet class org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
or a class it depends on”
please suggest me which plug in i need to add to resolve this.
Hi Ravi,
I have copied the above application in Tomact 6.0 , i have added the jars also.
After deploying while running the application i am getting below error.Please share
what are the extra configurations we need to do at Tomcat End.
Does it work in cross-origin request (CORS)? I couldn’t make it work…
My partner and I absolutely love your blog and find a lot of your post’s to be exactly I’m looking for. Would you offer guest writers to write content for you? I wouldn’t mind composing a post or elaborating on a few of the subjects you write about here. Again, awesome blog!
Great Tutorial. Your tutorials are always the best. Example code is working & easy to understand. Excellent templates for learning the features of JAX-RS.
The above example with Alternative REST Service Registration is working for me but it doesn’t work if I register the service via “ResteasyBootstrap” listener.
I get this error in later case
—————————–
HTTP Status 404 – Could not find resource for relative : /message/mkyong of full path: http://localhost:8089/RESTfulExample/rest/message/mkyong
type Status report
message Could not find resource for relative : /message/mkyong of full path: http://localhost:8089/RESTfulExample/rest/message/mkyong
description The requested resource (Could not find resource for relative : /message/mkyong of full path: http://localhost:8089/RESTfulExample/rest/message/mkyong) is not available.
Apache Tomcat/6.0.29
————————
I’m getting the same error at the moment
I am getting the same error.
Hi,
Will it works on tomcat server.
Hi there,
I built my first RESTful web service with Eclipse Juno and JBoss 7, using your tutorial.
Many thanks, you saved me a lot of bootstrapping time.
Much appreciated :-)
Thanks a lot for your examples. They are a tremendous help.
Hey mkyong,
Thanks for putting this together. I’ve been having problems getting it working. I keep getting a java.lang.ClassNotFoundException: org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap exception when I start my server. I can confirm my pom.xml has the dependency in place.
Please help!
Thanks again.
Also, when I try your source code and hit the demo URL, I get this message back:
[8/30/2012 9:48:41 PM] System.Deployment.Application.InvalidDeploymentException (ManifestParse)
Very lost, thanks for any help.
Ever resolve your manifest problem?
Thanks,
jd
Hi Henry,
this problem can be solve in two ways –
1) If you have installed both the Maven Eclipse Plugin and the Maven WTP Plugin this is automatic. If you don’t have these installed, go ahead and install them and then once Eclipse restarts right-click on the project and do a Maven > Update project…. This will internally change the project configuration so the Maven dependencies are copied to the /WEB-INF/lib folder on your deployment target.
2) If you don’t want to use any of these plug-ins, then you have to go to the Project properties > Deployment Assembly configuration and add your dependencies manually, but again, this is done automatically by these plug-ins.
Hi,
Do you know to do this HelloWorld on JBoss SwitchYard, using RESTeasy?
I need to put a SOAP Service (already made one, that is working) with a REST service on a SwitchYard project, I’m using JBoss Developer Studio
https://www.jboss.org/switchyard
http://www.jboss.org/resteasy
I’m asking your help because, in my case, your tutorial/guide doesn’t work, I don’t have any compile errors/warning, but I can’t use service on browser, I think it is because SwitchYard uses different ports (on server) and definitions (on Maven).
Regards,
Paulo
A trivial question (sorry), how do I run this app? mvn tomcat:run ? Thanks.
Read this How to run mkyong tutorial
Thanks. Works well.
Thanks for posting article. It was useful. :)
Hi, great article!
I’ve been able to run a REST service with the configuration you provided in a GWT application
web.xml
resteasy.scan true <!-- this need same with resteasy servlet url-pattern --> resteasy.servlet.mapping.prefix /api org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap resteasy-servlet org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher resteasy-servlet /api/*, however when deploying to JBoss AS7 it fails with:
Exception sending context initialized event to listener instance of class org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap: java.lang.NoClassDefFoundError: javax/servlet/ServletContext
For it to work I need to change web.xml as follows
but is really annoying having to change the web.xml file from development to deployment back and forth. Have you had this problem? Do you have any suggestion how to overcome this?
Thanks!
Hi cirovladimir:
I am facing the same problem you had with JBOSS AS7. May I know what exactly the changes you did on the web.xml ?
Regards,
Fan