每天分享最新软件开发,Devops,敏捷,测试以及项目管理最新,最热门的文章,每天花3分钟学习何乐而不为,希望大家点赞,加关注,你的支持是我最大的动力。
Jersey 项目有很好的文档记录,因此可以很容易地使用 Java 学习 REST。在本文中,我将构建两个项目。第一个项目将是一个非常简单的 HTML 页面,它向用户显示一个表单,然后将其提交给驻留在同一服务器上的 REST 项目。第二个项目将是 REST 部分。
对于本文,我使用了以下工具:
1. Netbeans 7
2. Apache Tomcat 7
3. Jersey
4. Java
我在 OS X Lion 上构建了这个系统。
继续并使用 Netbeans 7创建一个新的 MavenWeb 应用程序,命名为: MyForm
生成项目之后,获取结果(默认) index.jsp 文件并删除它。在其位置添加一个名为: index.html 的文件,并向其添加以下内容:
REST with Forms
基本上,我创建了一个简单(丑陋)的表单,它接受用户输入的一些参数。他们提交表单,数据被发送到我们即将构建的 REST 项目。这里的想法是我们使用一个 HTTPPOST 来创建一个新消息。
这是第一个项目!使用 Netbean 的 Maven 集成执行 Clean 和 Build,然后将生成的 WAR 文件部署到 ApacheTomcat。
使用 Netbeans 7创建另一个新的 Maven Web 应用程序,名为: RESTwithForms
向新项目添加两个新的 Java 类:
1.MyApplication
2.MessageResource
Java 的代码如下:
package com.giantflyingsaucer;
import com.sun.jersey.api.core.PackagesResourceConfig;
import javax.ws.rs.ApplicationPath;
@ApplicationPath("/")
public class MyApplication extends PackagesResourceConfig {
public MyApplication() {
super("com.giantflyingsaucer");
}
}简而言之,这段代码允许我们使用一些 Servlet 3.0的好处(例如,我们不需要为这个项目创建 web.xml 文件)。有关详细信息,请参阅标题为: 示例2.8的部分。自定义应用程序模型和示例2.9中的 Reusing Jersey 实现。使用@ApplicationPath 和 Servlet 3.0在此链接部署 JAX-RS 应用程序。
REST 项目的真正核心在 MessageResource.java 文件中,如下所示:
package com.giantflyingsaucer;
import java.net.URI;
import java.util.List;
import java.util.UUID;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import javax.ws.rs.Consumes;
import javax.ws.rs.core.MediaType;
@Path("/messages")
public class MessageResource {
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response createMessage(@FormParam("name") String name,
@FormParam("message") String message,
@FormParam("thelist") List list) {
if(name.trim().length() > 0 && message.trim().length() > 0 && !list.isEmpty()) {
// Note 1: Normally you would persist the new message to a datastore
// of some sort. I'm going to pretend I've done that and
// use a unique id for it that obviously points to nothing in
// this case.
// Note 2: The way I'm returning the data should be more like the commented
// out piece, I am being verbose for the sake of showing you how to
// get the values and show that it was read.
return Response.created(URI.create("/messages/" + String.valueOf(UUID.randomUUID()))).entity(
name+ ": " + message + " --> the items: " + list.get(0) + " - " + list.get(1)).build();
// This is a more real world "return"
//return Response.created(URI.create("/messages/" + String.valueOf(UUID.randomUUID()))).build();
}
return Response.status(Response.Status.PRECONDITION_FAILED).build();
}
} 注意: 特别注意评论。请不要发电子邮件告诉我,我不应该返回的值文本,也请不要告诉我,我应该迭代列表,等这只是一个演示。在生产环境中,您显然会以不同的方式完成这项工作。这里的关键是简单性和最少的代码。
此时,您需要将 jersey-server 作为依赖项添加到 POM 文件中。
com.sun.jersey
jersey-server-linking
1.9.1
使用 Netbean 的 Maven 集成执行 Clean 和 Build,然后将生成的 WAR 文件部署到 ApacheTomcat。您现在已经准备好测试它了。从第一个项目加载 HTML 文件并输入一些数据,然后提交它。
如果您有一个类似 FireBug 的 Firefox 工具,您还可以看到返回了一个 HTTP201(如果成功的话)。
如果在表单中没有输入任何数据,那么应该返回一个 HTTP412。
没有更多的工作,您可以轻松地使用类似 jQuery 的东西,并通过 AJAX 提交表单。
| 留言与评论(共有 0 条评论) “” |