JSON (JavaScript Object Notation) JavaScript uygulamaları için oluşturulmuş bir veri formatıdır.XML’e karşı doğmuş bir teknolojidir.Verilerimiz XML veya JSON şeklinde gösterebiliriz.JSON , XML’e göre daha az yer kaplar.Kullanım alanları değişiklik göstermektedir.Kullanılan projedeki değişkenlere göre XML veya JSON tipinde verilerimizi dönüş sağlayabiliriz.Bu yazımda RESTful JSON kullanımını anlatacağım.Proje üzerinde anlatmaya çalışalım.
1)Maven projesi oluşturalım ve kullanacağımız bağımlılıklarımızı pom.xml dosyamız içerisine ekleyelim.Bu proje içerisinde Resteasy kullandığımız için Jackson kütüphanesini bağımlılıklarımız arasına eklememiz gerekiyor.Jersey kütüphanesi kullanmış olsaydık Jersey-Json bağımlılığını projemize eklememiz gerekirdi.
[code lang=”xml”]
<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>008-RESTeasyJacksonJSON</groupId>
<artifactId>008-RESTeasyJacksonJSON</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.3.1.GA</version>
</dependency>
<!– https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jaxb-provider –>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>2.3.1.GA</version>
</dependency>
<!– https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jackson-provider –>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>2.3.1.GA</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
[/code]
2)İkinci adımda web.xml dosyamız içerisine Resteasy kullandığımızı belirtmemiz gerekiyor.Web.xml dosyamız içerisini düzenleyelim.
[code lang=”xml”]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>008-RESTeasyJacksonJSON</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<!– Resteasy kullanimi icin gerekli –>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</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>/*</url-pattern>
</servlet-mapping>
</web-app>
[/code]
3)com.enesbyc.model paketimizi oluşturup içerisine Product isminde bir sınıf oluşturalım.Sınıfın içerisinde kullanacağımız property’lerimizi tanımlayalım.Burada dikkat etmemiz gereken nokta biz JSON tipinde veri oluşturmak istiyoruz.Fakat Web Service arka planda XML ile işlemler yapıyor.Bu yüzden Product sınıfımız içerisinde XmlRootElement kullanıyoruz.JSON tipinde verinin kullanıcıya return edilme işlemini Service sınıfımız içerisinde gerçekleştireceğiz.
[code lang=”java”]
package com.enesbyc.model;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
//XML formati kullancagimizi belirtiyoruz.
//Product isminde bir xml olusturulmus oluyor.
//Bu sinif üzerinden xml islemlerimizi artik yapabiliriz.
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Product {
//XML içerisindeki property olarak düsünebiliriz.
//product içerisinde productName ve productPrice
//alanlarini xml tipinde olusturuyoruz.
@XmlElement
String productName;
@XmlElement
String productPrice;
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductPrice() {
return productPrice;
}
public void setProductPrice(String productPrice) {
this.productPrice = productPrice;
}
@Override
public String toString() {
return "Product [productName=" + productName + ", productPrice=" + productPrice + "]";
}
}
[/code]
4)com.enesbyc.service paketimizi oluşturalım ve içerisine ProductService isimli sınıfımızı oluşturalım.Service sınıfımız içerisinde Produces anotasyonu ile JSON tipinde veri döneceğini belirtiyoruz.Resteasy kullandığımız için bize JSON formatında veriyi Jackson kütüphanesi yardımı ile otomatik olarak çevirecektir.
[code lang=”java”]
package com.enesbyc.service;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.enesbyc.model.Product;
//Url kismina /product geldiginde yapilacaklari belirtiyoruz.
@Path("/product")
public class ProductService {
//Url kismina /product/info geldiginde yapilacaklari belirtiyoruz.
//JSON tipinde veri dönecegini belirtiyoruz.
@GET
@Path("/info")
@Produces(MediaType.APPLICATION_JSON)
public Product getProductInfo(){
Product product=new Product();
product.setProductName("Cup");
product.setProductPrice("25");
return product;
}
}
[/code]
5)Projemize sağ tıklayıp Run as->Run on the Server seçelim.Bu sayede web servisimiz çalışmış oldu.Daha sonra URL kısmına /product/info yazalım.Çıktımızda da görüldüğü gibi JSON tipinde bir nesne return edilmiş oldu.
Bir sonraki yazımda görüşmek üzere…