这是我的要求:
我尝试在网上搜索一些全面的例子,但找不到任何。 有人可以帮忙吗?
答案 0 :(得分:8)
Jersey是用于构建RESTful Web服务的JAX-RS实现。
从他们的教程开始。这很容易。
http://jersey.java.net/nonav/documentation/latest/getting-started.html
编辑:此外,还有一本关于这个主题的伟大的O'Riley书(令人震惊,我知道); RESTful Java with JAX-RS
答案 1 :(得分:2)
我会看一下Spring提供的内容。有RestTemplate
和Spring MVC,两者都可以帮助你。
另一个有用的东西是某种JSON-Mapping库。我会推荐Jackson Object Mapper。看看他们的教程,了解它的工作原理。
答案 2 :(得分:2)
我将概述我的博文Building a RESTful Web Service in Java的基本部分,其中显示了使用以下内容连接数据库和创建RESTful Web服务可以采取的步骤。
以下说明假设您已经安装了上面列出的技术。该服务用于数据库表' item'存储具有 id,itemName,itemDescription,itemPrice 字段的项目。
http://localhost:4848
)。要映射到数据库,请使用JPA实体。 JPA实体是一个简单的POJO(普通旧Java对象),注释了JPA注释。如果数据库已经存在,Eclipse可以从数据库生成JPA实体。
使用Eclipse中的SQL 剪贴簿创建一个数据库表,其中包含以下SQL
CREATE TABLE item (
id VARCHAR(36) NOT NULL,
itemName TEXT NOT NULL,
itemDescription TEXT,
itemPrice DOUBLE,
PRIMARY KEY (id)
)
通过右键单击在Eclipse中创建的包并选择 New>,从数据库表创建JPA实体。表中的JPA实体。
由于此示例使用UUID作为主键,因此还有注释(@UuidGenerator和@GeneratedValue)特定于EclipseLink来负责创建它们。没有必要使用UUID作为主键,但我使用它的原因之一是我可以在客户端上创建一个带有UUID的模型,然后将新模型PUT到服务器(例如,离线模式,当单元信号返回时,本地创建和存储的新模型将被PUT到服务器。如果服务器创建了UUID,则使用POST将新模型发送到没有id的服务器。
package com.zangolie.smallbiz.entities;
import java.io.Serializable;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.annotations.UuidGenerator;
/**
* The persistent class for the item database table.
*
*/
@UuidGenerator(name="UUID")
@XmlRootElement
@Entity
@NamedQuery(name="Item.findAll", query="SELECT i FROM Item i")
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="UUID")
@Column(length=36)
private String id;
private String itemDescription;
@Lob
private String itemName;
private double itemPrice;
public Item() {
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getItemDescription() {
return this.itemDescription;
}
public void setItemDescription(String itemDescription) {
this.itemDescription = itemDescription;
}
public String getItemName() {
return this.itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public double getItemPrice() {
return this.itemPrice;
}
public void setItemPrice(double itemPrice) {
this.itemPrice = itemPrice;
}
}
创建文件夹src \ main \ webapp \ WEB-INF \ classes \ META-INF并创建persistence.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="testPU" transaction-type="JTA">
<jta-data-source>jdbc/SmallBiz</jta-data-source>
</persistence-unit>
</persistence>
xml代码段
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
JAX-RS服务
package com.zangolie.smallbiz.services.rest;
import java.net.URI;
import java.util.Collection;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.ws.rs.BadRequestException;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.NotFoundException;
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.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import com.zangolie.smallbiz.entities.Item;
@Path("/item")
@Produces ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Consumes ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Stateless
public class ItemRestService {
//the PersistenceContext annotation is a shortcut that hides the fact
//that, an entity manager is always obtained from an EntityManagerFactory.
//The peristitence.xml file defines persistence units which is supplied by name
//to the EntityManagerFactory, thus dictating settings and classes used by the
//entity manager
@PersistenceContext(unitName = "testPU")
private EntityManager em;
//Inject UriInfo to build the uri used in the POST response
@Context
private UriInfo uriInfo;
@POST
public Response createItem(Item item){
if(item == null){
throw new BadRequestException();
}
em.persist(item);
//Build a uri with the Item id appended to the absolute path
//This is so the client gets the Item id and also has the path to the resource created
URI itemUri = uriInfo.getAbsolutePathBuilder().path(item.getId()).build();
//The created response will not have a body. The itemUri will be in the Header
return Response.created(itemUri).build();
}
@GET
@Path("{id}")
public Response getItem(@PathParam("id") String id){
Item item = em.find(Item.class, id);
if(item == null){
throw new NotFoundException();
}
return Response.ok(item).build();
}
//Response.ok() does not accept collections
//But we return a collection and JAX-RS will generate header 200 OK and
//will handle converting the collection to xml or json as the body
@GET
public Collection<Item> getItems(){
TypedQuery<Item> query = em.createNamedQuery("Item.findAll", Item.class);
return query.getResultList();
}
@PUT
@Path("{id}")
public Response updateItem(Item item, @PathParam("id") String id){
if(id == null){
throw new BadRequestException();
}
//Ideally we should check the id is a valid UUID. Not implementing for now
item.setId(id);
em.merge(item);
return Response.ok().build();
}
@DELETE
@Path("{id}")
public Response deleteItem(@PathParam("id") String id){
Item item = em.find(Item.class, id);
if(item == null){
throw new NotFoundException();
}
em.remove(item);
return Response.noContent().build();
}
}
创建一个定义基本uri的应用程序类。例如http://localhost:8080/smallbiz/rest
package com.zangolie.smallbiz.services.rest;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("rest")
public class ApplicationConfig extends Application {
}
从Eclipse中部署到GlassFish。
虽然该示例使用GlassFish,但任何符合Java EE 7的容器都可以使用。如果你确实使用了不同的容器(假设你使用相同的EclipseLink for JPA和Jersey来实现JAX-RS),你将不得不:
希望它有用。
答案 3 :(得分:1)
这可能正是您正在寻找的: http://restsql.org/doc/Overview.html
声明: 我从未使用它 - 只记得最近在新闻帖中看到它。