使用 jersey构建RESTful的WebService

jersey的依赖包

核心服务器:jersey-core.jar,jersey-server.jar,jsr311-api.jar,asm.jar

核心客户端:jersey-client.jar
JAXB 支持:  jaxb-impl.jar,jaxb-api.jar,activation.jar,stax-api.jar,wstx-asl.jar
JSON 支持: jersey-json.jar

Spring支持:jersey-spirng.jar

Bean注解说明
@Path,路径信息,表示映射出去的访问路径。

@Path("/myResource")

@Produces,用于限制post和get方法返回的参数类型,支持json、string、xml、html

@Produces({"application/xml", "application/json"})

@Consumes,用于限制输入的参数的类型,支持json、string、xml、html

@Consumes(MediaType.APPLICATION_XML)这里可以以数组形势支持多个参数

@QueryParam,@DefaultValue,通过request传入的参数,@DefaultValue表示默认参数。

@DefaultValue("2") @QueryParam("step") int step,默认为step=2

@QueryParam指在URI的?中传入的参数,如www.xxx.com/user/dept?id=1。那么@QueryParam("id")获取的参数就是id=1

@PathParam 在path路径中传入的参数,如www.xxx.com/user/1。那么@PathParam(“id")=1

@ FormParam即为通过post传入的参数,比如表单中的数据

@ MatrixParam,@ HeaderParam,@ CookieParam和听从以相同的规则。

@ MatrixParam提取URL路径段的信息。

@ HeaderParam提取的HTTP头信息。
@ CookieParam提取信息的Cookie饼干宣布相关的HTTP标头。

@POST
@Consumes("application/x-www-form-urlencoded")
public void post(@FormParam("name") String name) {

pojo层面等相关注解,@XmlRootElement,支持JPA注解。

Spring相关注解,比如@Autowired(required=true) 、@Qualifier("persionDao")、@Component

@Scope("request")


@Path("category")
public class CategoryService {

	@GET
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List getCategory() {
		List list = new ArrayList();
		list.add(new Category(1, "No.1 category"));
		list.add(new Category(2, "No.2 category"));
		return list;
	}

	@GET
	@Path("{id}")
	public Category getCategory(@PathParam("id") int id) {
		return new Category(id, "id is " + id);
	}

	@GET
	@Path("json/{id}")
	@Produces(MediaType.APPLICATION_JSON)
	public JSONObject getCategoryJson(@PathParam("id") int id) {
		JSONObject o = new JSONObject();
		o.put("id", id);
		o.put("name", "id is " + id);
		return o;
	}

	@POST
	@Path("add")
	@Produces(MediaType.TEXT_HTML)
	@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public String addCategory(Category category) {
		System.out.println("处理添加类别逻辑,接受的数据为id:" + category.getId()
				+ ",name:" + category.getName());
		return "ok";
	}
	
	@POST
	@Path("addbyname")
	public String addCategory(@FormParam("name") @DefaultValue("NoName")String name){
		System.out.println("处理添加类别逻辑,接受的数据为name:" + name);
		return "添加类别" + name + "成功";
	}
	
	@PUT
	@Path("update")
	@Produces(MediaType.TEXT_HTML)
	@Consumes({MediaType.APPLICATION_JSON , MediaType.APPLICATION_XML})
	public String updateCategory(Category category){
	        System.out.println("处理更新类别逻辑,接受的数据为id:"+category.getId()+",name:"+category.getName());
	        return "ok";		
	}
	
	@DELETE
	@Path("delete/{id}")
	public String deleteCategory(@PathParam("id") int id){
		System.out.println("处理删除类别逻辑,接受的数据为id:"+id);
	        return "ok";
	}
}

@XmlRootElement
public class Category {
	private int id;
	private String name;
	public Category(){}
	public Category(int id, String name){
		this.id = id;
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "Category [id=" + id + ", name=" + name + "]";
	}
	//---------
	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;
	}	
}


部署之后我们可以使用MyEclipse自带的工具进行测试。

使用 jersey构建RESTful的WebService_第1张图片



如图,我们可以通过get方法获得xml格式的预先定义的一个list的数据

使用 jersey构建RESTful的WebService_第2张图片



另一个方法,选择接受类型为json,输入pathparam,可以得到一个被转换成json的对象

使用 jersey构建RESTful的WebService_第3张图片



这里我们post一个xml到服务器,可以得到响应,看到响应中的数据是我们上传的内容

使用 jersey构建RESTful的WebService_第4张图片



你可能感兴趣的:(web,service,java)