restfulwebservices中的Jaxb

restfulwebservices中的Jaxb,rest,jaxb,Rest,Jaxb,我以前使用Jaxb研究过Web服务。我从xsd生成Java,然后使用HTTPPOST将xml请求发布到指定的URL。最近我听说了这个RESTfulWeb服务,在阅读时我觉得我之前所做的只是RESTfulWeb服务。但是,我不确定这是否是同一件事。 有人能解释一下吗。听起来您一直在创建相同类型的RESTful服务。您可能指的是is JAX-RS with is标准,它定义了创建RESTful服务的更简单方法,其中JAXB是应用程序/xml媒体类型的标准绑定层。下面是一个示例服务: package

我以前使用Jaxb研究过Web服务。我从xsd生成Java,然后使用HTTPPOST将xml请求发布到指定的URL。最近我听说了这个RESTfulWeb服务,在阅读时我觉得我之前所做的只是RESTfulWeb服务。但是,我不确定这是否是同一件事。
有人能解释一下吗。

听起来您一直在创建相同类型的RESTful服务。您可能指的是is JAX-RS with is标准,它定义了创建RESTful服务的更简单方法,其中JAXB是
应用程序/xml
媒体类型的标准绑定层。下面是一个示例服务:

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);
        }
    }

}
了解更多信息


说到“RESTful”,它只是HTTP方法和url模式的约定

CRUD   METHOD   URL                         RESPONSE DESCRIPTION
----------------------------------------------------------------
CREATE POST     http://www.doma.in/people   202      Creates a new person with given entity body
READ   GET      http://www.doma.in/people   200
READ   GET      http://www.doma.in/people/1 200 404  Reads a single person
UPDATE PUT      http://www.doma.in/people/2 204      Updates a single person with given entity body
DELETE DELETE   http://www.doma.in/people/1 204      Deletes a person mapped to given id(1)
您甚至可以使用Sevlets实现此类合同。实际上,在
JAX-RS
时代之前,我就已经使用过Sevlets了

当您使用
JAX-RS
时,您的生活将更加轻松

这是布莱斯·道格汉先生的略作修改的版本。 布莱斯·道格汉先生的密码没问题

我只想为上面的url模式添加更多内容

CRUD   METHOD   URL                         RESPONSE DESCRIPTION
----------------------------------------------------------------
CREATE POST     http://www.doma.in/people   202      Creates a new person with given entity body
READ   GET      http://www.doma.in/people   200
READ   GET      http://www.doma.in/people/1 200 404  Reads a single person
UPDATE PUT      http://www.doma.in/people/2 204      Updates a single person with given entity body
DELETE DELETE   http://www.doma.in/people/1 204      Deletes a person mapped to given id(1)
JAX-RS
可以提供的一个伟大的功能是,如果您有这些优秀的JAXB类,您可以根据客户机的需要提供XMLs和json。请参见
@以相同的方法为这两种格式生成
s和
@消耗
s

当客户机希望通过
Accept:application/XML
以XML形式接收时,他们只需要获取XML

当客户机希望通过
Accept:application/JSON
作为JSON接收时,他们只需要获得JSON

@Path(“/customers”);
公共类CustomerResource{
/**
*读取所有人的单位。
*/
@职位
@产生({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
公众回应阅读({
列出的最终列表=customerBean.List();
最终客户包装=Customers.newInstance(列出);
返回Response.ok(wrapped.build();
}
@职位
@使用({MediaType.APPLICATION\uxml,MediaType.APPLICATION\ujson})
公众响应createCustomer(最终客户){
entityManager.persist(客户);
返回响应。已创建(“/”+customer.getId()).build();
}
@得到
@产生({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
@路径(“/{id:\\d+}”)
公共响应读取(@PathParam(“id”)最终长id){
最终客户=entityManager.find(Customer.class,id);
如果(客户==null){
返回Response.status(status.NOT_FOUND).build();
}
返回Response.ok(customer.build();
}
@放
@使用({MediaType.APPLICATION\uxml,MediaType.APPLICATION\ujson})
public void updateCustomer(最终客户){
entityManager.merge(客户);
}
@删除
@路径(“/{id:\\d+}”)
public void deleteCuster(@PathParam(“id”)最终长id){
最终客户=entityManager.find(Customer.class,id);
如果(客户!=null){
entityManager.remove(客户);
}
返回Response.status(status.NO_CONTENT.build();
}
}
说你想提供一些图片

@GET
@路径(“/{id:\\d+}”)
@产生({“image/png”、“image/jpeg”})
公众反应阅读图像(
@HeaderParam(“接受”)字符串接受,
@PathParam(“id”)最终长id,
@QueryParam(“宽度”)@DefaultValue(“160”)最终整数宽度,
@QueryParam(“高度”)@DefaultValue(“160”)最终整数高度){
//获取图像
//调整图像大小
//为accept(MIME类型)生成缓冲区映像
//将其重写为字节[]
返回Response.ok(字节).build();
//您可以将事件作为流式输出发送
返回Response.ok(newstreamingoutput(){…}).build();
}