Java Restful Web Service – Jersey

File: pom.xml

 

<project xmlns=”http://maven.apache.org/POM/4.0.0&#8243; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd”&gt;

<modelVersion>4.0.0</modelVersion>

<groupId>com.tepl</groupId>
<artifactId>demorest</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>demorest</name>

<build>
<finalName>demorest</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<inherited>true</inherited>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<!– use the following artifactId if you don’t need servlet 2.x compatibility –>
<!– artifactId>jersey-container-servlet</artifactId –>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
</dependency>

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
<!– https://mvnrepository.com/artifact/mysql/mysql-connector-java –>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<properties>
<jersey.version>2.29.1</jersey.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

 

File: Student.java

 

package com.tepl.demorest;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Student {

// create variables
private int sid;
private String name;
private int marks;
private int std;

// generate Getters & Setter for above variables
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMarks() {
return marks;
}
public void setMarks(int marks) {
this.marks = marks;
}
public int getStd() {
return std;
}
public void setStd(int std) {
this.std = std;
}

// generate toString for above variables //to print the values
@Override
public String toString() {
return “Student [sid=” + sid + “, name=” + name + “, marks=” + marks + “, std=” + std + “]”;
}

}

 

 

File: StudentResource.java

 

package com.tepl.demorest;

import java.util.Arrays;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path(“students”)
public class StudentResource {

StudentRepo repo = new StudentRepo();

@GET
@Produces({
MediaType.APPLICATION_XML,
MediaType.APPLICATION_JSON
})
//content negotiation for the type(json/xml)
//for json we need to have external dependency. get it by using pom.xml
//add “jersey-media-moxy” dependency
public List < Student > getStudents() {
return repo.getStudents();
}

@GET
@Path(“student/{id}”)
@Produces({
MediaType.APPLICATION_JSON,
MediaType.APPLICATION_XML
})
public Student getStudent(@PathParam(“id”) int id) {

return repo.getStudent(id);
}

@POST
@Path(“student”)
@Consumes({
MediaType.APPLICATION_XML,
MediaType.APPLICATION_JSON
}) // if mentioned one of it anything …will restrict other posts
public Student createStudent(Student a1) {
System.out.println(a1);
repo.create(a1);
return a1;

}

@PUT
@Path(“student”)
@Consumes({
MediaType.APPLICATION_XML,
MediaType.APPLICATION_JSON
}) // if mentioned one of it anything …will restrict other posts
public Student updateStudent(Student a1) {
System.out.println(a1);
if (repo.getStudent(a1.getSid()).getSid() == 0) {
repo.create(a1); //create if not exist with the selected id

} else {
repo.update(a1); //update if already exist with the selected id
}
return a1;

}

@DELETE
@Path(“student/{id}”)
public Student killStudent(@PathParam(“id”) int id) {

Student a = repo.getStudent(id);

if (a.getSid() != 0) {
repo.delete(id);
} else {
System.out.println(“Requested id not found”);
}

return a;

}

}

 

 

File: StudentRepo.java

 

package com.tepl.demorest;

import java.util.ArrayList;
import java.util.List;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class StudentRepo {

//List<Student> students; //declare list of objects

//Object of connection

Connection con = null;

public StudentRepo() { //Constructor
//After declare you need this constructor to create the object of it

String url = “jdbc:mysql://localhost:3306/demorest”;
String username = “root”;
String password = “”;

try {
Class.forName(“com.mysql.jdbc.Driver”);
con = DriverManager.getConnection(url, username, password); //connection object
} catch (Exception e) {
System.out.println(e);

}
}

public List < Student > getStudents() {
List < Student > students = new ArrayList < > ();
String sql = “select * from students”;
try {
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
Student s = new Student();
s.setSid(rs.getInt(1));
s.setName(rs.getString(2));
s.setStd(rs.getInt(3));
s.setMarks(rs.getInt(4));

students.add(s);

}
} catch (Exception e) {
System.out.println(e);
}
return students;
}

public Student getStudent(int sid) {

String sql = “select * from students where id=” + sid;
Student s = new Student();
try {
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
if (rs.next()) {

s.setSid(rs.getInt(1));
s.setName(rs.getString(2));
s.setStd(rs.getInt(3));
s.setMarks(rs.getInt(4));

}
} catch (Exception e) {
System.out.println(e);
}
return s;

}

public void create(Student a1) {

String sql = “insert into students values (?,?,?,?)”;

try {
PreparedStatement st = con.prepareStatement(sql);

st.setInt(1, a1.getSid()); // first ? mark replaced by a1.getSid()…likewise below 2,3,4
st.setString(2, a1.getName());
st.setInt(3, a1.getStd());
st.setInt(4, a1.getMarks());

st.executeUpdate();

} catch (Exception e) {
System.out.println(e);
}

}

public void update(Student a1) {

String sql = “update students set name=?, std=?, marks=? where id=?”;

try {
PreparedStatement st = con.prepareStatement(sql);

st.setString(1, a1.getName());
st.setInt(2, a1.getStd());
st.setInt(3, a1.getMarks());
st.setInt(4, a1.getSid());

st.executeUpdate();

} catch (Exception e) {
System.out.println(e);
}

}

public void delete(int id) {
String sql = “delete from students where id=?”;
try {
PreparedStatement st = con.prepareStatement(sql);
st.setInt(1, id);
st.executeUpdate();
} catch (Exception e) {

}

}

}

/*
* To start mysql server run below
* C:\wamp64\bin\mysql\mysql5.7.26\bin>mysqld
*
* To stop mysql server run
* C:\wamp64\bin\mysql\mysql5.7.26\bin>mysqladmin -u root shutdown
*
*
*
* JSON Request sample:
*
* {

“marks”: 96,
“name”: “Neha kakkar”,
“sid”:15,
“std”:12

}

* XML Request sample:
*
* <student>
<marks>58</marks>
<name>Sachin Tendulkar</name>
<sid>9</sid>
<std>10</std>
</student>
*
*
*
*
* PUT Request sample
*
* {
“marks”: 96,
“name”: “Neha K”,
“sid”:15,
“std”:12

}
*
*/