我在文本中有一些描述RESTful网络服务器的界面描述。我还有JAX-B带注释的对象,我想从该界面推送和接收。
我不确定已经实施了多少对此类任务的支持。有一些泽西岛的事情,但仍然是最新的?
我是否必须定义目标URL,打开流,序列化xml对象(可能先将其转换为字符串?),然后将其写入流中?
或者是否有一些神奇的方法只需要一个URL和JAX-B对象,也许我想要PUT,DELETE,POST或GET它?
答案 0 :(得分:5)
JAX-RS 是您在此案例中要使用的内容,而Jersey是参考实现。 JAXB是JAX-RS的默认绑定层。以下是支持PUT
,DELETE
,POST
和GET
的RESTful服务示例:
package org.example;
import java.util.List;
import javax.ejb.*;
import javax.persistence.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {
@PersistenceContext(unitName="CustomerService",
type=PersistenceContextType.TRANSACTION)
EntityManager entityManager;
@POST
@Consumes(MediaType.APPLICATION_XML)
public void create(Customer customer) {
entityManager.persist(customer);
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
@PUT
@Consumes(MediaType.APPLICATION_XML)
public void update(Customer customer) {
entityManager.merge(customer);
}
@DELETE
@Path("{id}")
public void delete(@PathParam("id") long id) {
Customer customer = read(id);
if(null != customer) {
entityManager.remove(customer);
}
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("findCustomersByCity/{city}")
public List<Customer> findCustomersByCity(@PathParam("city") String city) {
Query query = entityManager.createNamedQuery("findCustomersByCity");
query.setParameter("city", city);
return query.getResultList();
}
}
以下是完整示例的链接: