Skip to content

Latest commit

 

History

History
281 lines (254 loc) · 6.74 KB

File metadata and controls

281 lines (254 loc) · 6.74 KB

Jax Rs

  • Dependency
  • Deployment Descriptor
  • Method GET and Hallo world
  • Produces for application/json
    • configure xml to model object
  • Method POST and Passing Object
  • Query
  • Consume API
  • Receive and Upload File

Dependency

<dependency>
	<groupId>com.sun.jersey</groupId>
	<artifactId>jersey-server</artifactId>
	<version>1.8</version>
</dependency>
<dependency>
	<groupId>com.sun.jersey</groupId>
	<artifactId>jersey-json</artifactId>
	<version>1.18.1</version>
</dependency>
<dependency>
    	<groupId>org.glassfish.jersey.core</groupId>
    	<artifactId>jersey-client</artifactId>
    	<version>2.25.1</version>
</dependency>
<dependency>
    	<groupId>org.glassfish.jersey.media</groupId>
    	<artifactId>jersey-media-json-jackson</artifactId>
    	<version>2.25.1</version>
</dependency>

<!-- for sending file / upload -->
<dependency>
	<groupId>com.sun.jersey.contribs</groupId>
	<artifactId>jersey-multipart</artifactId>
	<version>1.8</version>
</dependency>

Deployment Descriptor or ApplicationPath

Detection application root path

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("api")
public class ApplicationApi extends Application{

}

Detection root path with DD

<servlet>
  <servlet-name>jersey-serlvet</servlet-name>
  <servlet-class>
                   com.sun.jersey.spi.container.servlet.ServletContainer
              </servlet-class>
  <init-param>
       <param-name>com.sun.jersey.config.property.packages</param-name>
       <param-value>com.webapp.api</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>jersey-serlvet</servlet-name>
  <url-pattern>/api/*</url-pattern>
</servlet-mapping>

Method GET and Hallo World

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;

@Path("/hallo")
public class Hallo {

	@GET
	@Path("/ping")
	public Response index() {
		return Response.ok().entity("hallo, arrizaqu").build();
	}
}

Produces for application/json

configure xml to model object

@XmlRootElement
public class User {
	private String id;
	private String name;
	private String address;
	private String email;
//----------------- etc

example

@GET
@Path("/user")
@Produces(MediaType.APPLICATION_JSON)
public Response second() {
	User user = new User();
	user.setEmail("[email protected]");
	user.setName("masyda arrizaqu");
	user.setAddress("seputih banyak");
	return Response.status(201).entity(user).build();
}

Method POST and Passing Object

example 1

@POST
@Path("/save")
@Consumes(MediaType.APPLICATION_JSON)
public void saveUser(User user) {
	System.out.println("user name : "+ user.getName());
}

example 2

@POST
@Path("/save")
@Consumes(MediaType.APPLICATION_JSON)
public Response saveUser(User user) {
	System.out.println("user name : "+ user.getName());
	return Response.status(201).build();
}

example 3

@POST
@Path("/user-request")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response requestPostUser(User user) {
	return Response.status(201).entity(user).build();
}

Query

example

@GET
@Path("/info")
public void getUrlParam(@QueryParam("username") String username, @QueryParam("age") int age) {
	System.out.println("username : "+ username);
	System.out.println("age : "+ age);
}

URL

http://localhost:8080/api/hallo/info?age=12&username=danang

result

username : danang
age : 12

Receive and Upload File

1. Add Init MultiPartFeature Param in DD

  <servlet>
	<servlet-name>jersey-serlvet</servlet-name>
	<servlet-class>
	     com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
	<init-param>
	     <param-name>com.sun.jersey.config.property.packages</param-name>
	     <param-value>com.webapp.api</param-value>
	</init-param>
	 <init-param>
	<param-name>jersey.config.server.provider.classnames</param-name>
	<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
    </init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

2. provider

@Path("/pdf") 
@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadOk(
		@FormDataParam("file") InputStream uploadedInputStream,
		@FormDataParam("file") FormDataContentDisposition fileDetail) { 
	String uploadedFileLocation = "C:\\Users\\arrizaqu\\Documents\\testing\\fileupload\\" + fileDetail.getFileName();
	//uploadToLocalDrive(uploadedInputStream, uploadedFileLocation);
	uploadToWebFolder(uploadedInputStream, fileDetail.getFileName());
	String output = "File uploaded to : " + uploadedFileLocation;
	return Response.status(200).entity(output).build();
}

Upload To LocalDrive

private void uploadToLocalDrive(
	InputStream uploadedInputStream,
	String uploadedFileLocation) {

	try {
		OutputStream out = new FileOutputStream(new File(
				uploadedFileLocation));
		int read = 0;
		byte[] bytes = new byte[1024];

		out = new FileOutputStream(new File(uploadedFileLocation));
		while ((read = uploadedInputStream.read(bytes)) != -1) {
			out.write(bytes, 0, read);
		}
		out.flush();
		out.close();
	} catch (IOException e) {

		e.printStackTrace();
	}

}

Upload To Web Directory

//upload to web folder
public void uploadToWebFolder(InputStream uploadedInputStream,
		String uploadedFileLocation) {
	String relativeWebPath = "/assets/";
	String absoluteFilePath = servletContext.getRealPath(relativeWebPath +uploadedFileLocation);
	java.nio.file.Path path = Paths.get(absoluteFilePath);
	try {
		OutputStream out = new FileOutputStream(new File(
				absoluteFilePath));
		int read = 0;
		byte[] bytes = new byte[1024];

		out = new FileOutputStream(new File(uploadedFileLocation));
		while ((read = uploadedInputStream.read(bytes)) != -1) {
			out.write(bytes, 0, read);
		}
		out.flush();
		out.close();
	} catch (IOException e) {

		e.printStackTrace();
	}
}

3. html

@GET
@Path("/myhtml")
@Consumes("text/html")
public Response generateHTML() {
	String html = "<html><body>";
		html += "<form action='http://localhost:8080/api/hallo/pdf' method='POST' enctype='multipart/form-data'>"
				+ "<input type='file' name='myfile' >"
				+ "<input type='submit' name='submit' value='upload'>"
				+ "</form>";
	html +="</body><html>";
	return Response.ok().entity(html).build();
}

Reference

  1. http://www.baeldung.com/jax-rs-spec-and-implementations
  2. https://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/
  3. http://www.baeldung.com/jersey-jax-rs-client
  4. https://bytefish.de/blog/file_upload_api_jersey/
  5. https://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/
  6. https://www.geekmj.org/jersey/jax-rs-multiple-files-upload-example-408/