DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports Events Over 2 million developers have joined DZone. Join Today! Thanks for visiting DZone today,
Edit Profile Manage Email Subscriptions Moderation Admin Console How to Post to DZone Article Submission Guidelines
View Profile
Sign Out
Refcards
Trend Reports
Events
Zones
Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Partner Zones AWS Cloud
by AWS Developer Relations
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Partner Zones
AWS Cloud
by AWS Developer Relations
The Latest "Software Integration: The Intersection of APIs, Microservices, and Cloud-Based Systems" Trend Report
Get the report
  1. DZone
  2. Coding
  3. Languages
  4. Build a REST service with Netbeans 7, Java, and Jersey that returns JSON

Build a REST service with Netbeans 7, Java, and Jersey that returns JSON

Chad Lung user avatar by
Chad Lung
·
Dec. 05, 11 · Interview
Like (0)
Save
Tweet
Share
26.45K Views

Join the DZone community and get the full member experience.

Join For Free

One of the great things about Jersey is that it makes working with REST really easy. If your new to Jersey and REST then you can check out my previous article that shows you to easily build a simple REST service. Today I’m going to use Netbeans 7 (with its built-in Maven support) to build another simple REST service that can easily return JSON (with the help of JAXB).

With Netbeans 7 create a new Maven Web Application called: RestJson

You can remove the default index.jsp file that gets created. Right-click on the Dependencies and add jersey-server-linking as well as jersey-json.

Here is my complete POM file:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.giantflyingsaucer</groupId>
    <artifactId>RestJson</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
 
    <name>RestJson</name>
 
    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server-linking</artifactId>
            <version>1.10</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>1.10</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
 
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>6.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
 
</project>

The next thing to do is to create a class that extends PackagesResourceConfig which in a nutshell will make it so we won’t need a web.xml for this particular project.

Create a new class called RestJsonApplication with a namespace like: com.giantflyingsaucer.restjson

Here are the contents for the RestJsonApplication.java file:

package com.giantflyingsaucer.restjson;
 
import com.sun.jersey.api.core.PackagesResourceConfig;
import javax.ws.rs.ApplicationPath;
 
@ApplicationPath("/")
public class RestJsonApplication extends PackagesResourceConfig {
 
    public RestJsonApplication() {
        super("com.giantflyingsaucer.restjson.v1.resources.impl");
    }
}

Now you will create a new class called Item with the namespace of: com.giantflyingsaucer.restjson.v1.resources

What is with the “v1″? Simply put I have that in there for versioning – this is version one of this API.

Here are the contents for the Item.java file:

package com.giantflyingsaucer.restjson.v1.resources;
 
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement
public class Item {
 
    private int id;
    private String name;
    private String description;
 
    public Item() {}
 
    public Item(int id, String name, String description) {
        this.id = id;
        this.name  = name;
        this.description = description;
    }
 
    public String getDescription() {
        return description;
    }
 
    public void setDescription(String description) {
        this.description = description;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

As you can see this is a simple Java POJO with a sprinkle of JAXB. In the same package add another new class called: ItemResource

package com.giantflyingsaucer.restjson.v1.resources;
 
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
 
public interface ItemResource {
    // Example: Returning more than one Item
    @GET
    @Produces({MediaType.APPLICATION_JSON})
    List<Item> getItems();
}

This is the interface to the service in which we define what it will do. In this case it will return item objects in JSON format.

Go ahead and create the new implementation class now called: ItemResourceImpl which implements the ItemResource interface. The namespace for the new class is: com.giantflyingsaucer.restjson.v1.resources.impl

Here is the code for the ItemResourceImpl.java file:

package com.giantflyingsaucer.restjson.v1.resources.impl;
 
import com.giantflyingsaucer.restjson.v1.resources.Item;
import com.giantflyingsaucer.restjson.v1.resources.ItemResource;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.Path;
 
// Set the path, version 1 of API
@Path("/v1/item")
public class ItemResourceImpl implements ItemResource{
 
    @Override
    public List<Item> getItems() {
        List<Item> items = new ArrayList<Item>();
        items.add(new Item(100, "Widget", "A basic widget"));
        items.add(new Item(200, "SuperWidget", "A super widget"));
        items.add(new Item(300, "UberSuperWidget", "A uber super widget"));
 
        return items;
    }
}

For simplicity I add a few items and then simply return them. The conversion to JSON is handled for me.

Using the Maven support in Netbeans 7 do a Clean and Build command (right-click on the project) and deploy the resulting WAR file to something like Tomcat 7 (I’m using Tomcat 7 but feel free to use what you want as long as it supports Servlet 3.0 since we are not using a web.xml file for this project). Once the WAR has been extracted and deployed by Tomcat go ahead and hit the URL and you should see JSON coming back.

http://localhost:8080/RestJson-1.0-SNAPSHOT/v1/item

Results:

{ "item" : [ { "description" : "A basic widget",
        "id" : "100",
        "name" : "Widget"
      },
      { "description" : "A super widget",
        "id" : "200",
        "name" : "SuperWidget"
      },
      { "description" : "A uber super widget",
        "id" : "300",
        "name" : "UberSuperWidget"
      }
    ] }

You can get the full source code from here.

 

From http://www.giantflyingsaucer.com/blog/?p=3458

JSON REST Web Protocols NetBeans Build (game engine) Java (programming language)

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • The Path From APIs to Containers
  • Fargate vs. Lambda: The Battle of the Future
  • Cloud Performance Engineering
  • Reliability Is Slowing You Down

Comments

Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends: