レンタルサーバ上で
前提
この記事は、
Version7 に
また、2018/08/29
での
Wicket 7.3.0 で
この
目次
- 0. 参考
- 1. pomに
以下の 記述を 追加する - 2. GsonRestResourceの
継承クラスを 作成する - 3. WebApplicationの
継承クラス内で resouceを マウントする - 4. Javascriptでの
呼び出し記述 - 5. APIの
戻りの JSON
0. 参考 サイト
Working with REST in Wicket - DZone Integration
上記のサイトを ぱっと 見た 限り、 Wicket REST annotations
をインストールすれば、 Wicket 上で Restful な API が 使用できるようになると 思われます。
記事のリンクが 辿れないですが、 おそらく ソースリポジトリは core/wicketstuff-restannotations-parent at master かと 思われます。 java - Use Wicket as a REST API - Stack Overflow
Stack Overflow の記事です。 記載されているのは、 通常の Wicket Page で Json 形式 の レスポンス を 返す 実装に なります。 記事中に、 core/wicketstuff-restannotations-parent at master の リンクも 記載されています。
1. pomに 以下の 記述を 追加する
wicketstuff-restannotations
、wicketstuff-restannotations-json
を
<dependency> <groupId>org.wicketstuff</groupId> <artifactId>wicketstuff-restannotations</artifactId> <version>6.10.0</version> </dependency> <dependency> <groupId>org.wicketstuff</groupId> <artifactId>wicketstuff-restannotations-json</artifactId> <version>6.10.0</version> </dependency>
2. GsonRestResourceの 継承クラスを 作成する
FestivalApis.java
Rest サービス API です。public メソッドに 対して、 MethodMapping
アノテーションでURL を 設定しています。 package xyz.monotalk.web.apis; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.wicketstuff.rest.annotations.MethodMapping; import org.wicketstuff.rest.resource.gson.GsonRestResource; import xyz.monotalk.models.entity.Festival; public class FestivalApis extends GsonRestResource { private static final long serialVersionUID = -7863247209549049518L; @MethodMapping("/festivals") @SuppressWarnings("unchecked") public List<Festival> getAllfestivals() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("POfDM_Local"); EntityManager em = null; List<Festival> festivals = null; try { em = emf.createEntityManager(); festivals = (List<Festival>) em.createNamedQuery("findAllFestivals").getResultList(); } finally { if (em != null) { em.close(); } } return festivals; } }
補足
MethodMappingアノテーションでurlと methodを 紐付けします。 Festival.java
API で使用する Entity クラスです。
NetBeans でDatabase の テーブル定義を 元に 自動生成した Entity クラス を 使用しています。 package xyz.monotalk.models.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.NamedQuery; import javax.persistence.Table; @Entity @Table(name = "festival") @NamedQuery(name = "findAllFestivals", query = "SELECT f FROM Festival f") public class Festival { @Id @Column(name = "id") private int id; @Column(name = "name") private String name; @Column(name = "site_url") private String site_url; @Column(name = "description") private String 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; } public String getSite_url() { return site_url; } public void setSite_url(String site_url) { this.site_url = site_url; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Festival [id=").append(id).append(", name=").append(name).append(", site_url=") .append(site_url).append(", description=").append(description).append("]"); return builder.toString(); } }
3. WebApplicationの 継承クラス内で resouceを マウントする
- WicketApplication.java
package xyz.monotalk.web; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.request.resource.IResource; import org.apache.wicket.request.resource.ResourceReference; import xyz.monotalk.web.apis.FestivalApis; /** * Application object for your web application. If you want to run this * application without deploying, run the Start class. * * @see xyz.monotalk.Start#main(String[]) */ public class WicketApplication extends WebApplication { /** * @see org.apache.wicket.Application#getHomePage() */ @Override public Class<? extends WebPage> getHomePage() { return xyz.monotalk.web.pages.top.TopPage.class; } /** * @see org.apache.wicket.Application#init() */ @Override public void init() { super.init(); // pageMount mountPage("/top", xyz.monotalk.web.pages.top.TopPage.class); // mountApis mountResource("/manager", new ResourceReference("restReference") { private FestivalApis apis = new FestivalApis(); private static final long serialVersionUID = 7118595340535924652L; @Override public IResource getResource() { return apis; } }); } }
- 補足
以下の実装で、 URL /manager
配下 にFestibalApis の サービス URL を マウント している ことになります。 クラスがmountResource("/manager", new ResourceReference("restReference") {...
/manager
に、Method が /festivals
にマウントされている ため、 /manager/festivals
で、メソッド呼び出しが できるようになります。
4. JavaScriptでの 呼び出し記述
Web API を
$.ajax({ type : "GET", url : "./manager/festivals", data : {}, dataType : 'json' }).success(function(data) { self.bindListData(data); }).error(function(data) { alert("error"); console.log(data); });
5. APIの 戻りの JSON
以下のような
[{"id":1,"name":"Rainbow Disco Club","site_url":"http://www.rainbowdiscoclub.com/tokyo/","description":"Rainbow Disco Club"}, {"id":2,"name":"TAICOCLUB","site_url":"http://taicoclub.com/15/","description":"TAICOCLUB"}]
core/wicketstuff-restannotations-parent at master は、
ライブラリ内で
gson
を通常の
以上です。
コメント