`
wen147258
  • 浏览: 27799 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring+resteasy开发webservice服务

阅读更多
有一段时间没有更新博客,主要是最近一段时间自己比较迷茫,一直在思考自己以后的路该怎么走。希望大家也可以给我一些建议,谢谢!好了,回归正题,今天给大家带来的是spring+resteay开发webservice服务,不知道大家是否在这之前接触过webservice,我之前所了解的webservice是使用cxf还有axis2开发的,但是我觉得实现起来比较麻烦,而且不灵活,今天给大家介绍一种比较灵活的提供webservice服务的技术:resteasy。下面我重点讲解的resteasy常用的一些知识。我依然是结合例子给大家讲解。
package com.jrj.resteasy;

import javax.ws.rs.CookieParam;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.PathSegment;

import org.jboss.resteasy.annotations.Form;
import org.springframework.stereotype.Controller;

import com.alibaba.fastjson.JSONObject;
import com.jrj.entity.FormEntity;

@Controller
@Path("/content")
public class ContentService {

	
	/**
	 * path通配符
	 * @return
	 */
	@Path("/pathRegular/{msg}")
	@GET
	public String pathRegular(@PathParam("msg") String m){
		
		return m;
	}
	/**
	 * {var:.*}代表可以是任意多个路径名,如:a/b/c
	 * @param m
	 * @return
	 */
	@Path("/pathRegular1/{var:.*}/{msg}")
	@GET
	public String pathRegular1(@PathParam("msg") String m){
		
		return m;
	}
	
	/**
	 * {var}代表只能有一个路径名,如:a
	 * @param m
	 * @return
	 */
	@Path("/pathRegular1/{var}/{msg}")
	@GET
	public String pathRegular2(@PathParam("msg") String m){
		
		return m;
	}
	
	/**
	 * @PathParam的用法
	 * @param param
	 * @return
	 */
	@Path("/pathParam/{param}")
	@GET
	public String pathParam(@PathParam("param") String param){
		
		return "hello"+param;
	}
	
	/**
	 * @QueryParam的用法,如:GET /queryParam/2?name=wenqiang&age=23
	 * @param id
	 * @param name
	 * @param age
	 * @return
	 */
	@Path("/queryParam/{id}")
	@GET
	public String queryParam(@PathParam("id") int id,
							@QueryParam("name") String name,
							@QueryParam("age") int age){
		if(id==1){
			return "this is no people";
		}
		return "name is "+name+"age is" +age;
	}
	
	/**
	 * @HeadParam的用法,其中HeaderParam可以获取httpheader中的一些信息
	 * @param head
	 * @param myhead
	 * @return
	 */
	@Path("/headParam/{head}")
	@GET
	public String headParam(@PathParam("head") String head,
							@HeaderParam("myhead") String myhead){
		return head + " is " + myhead;
	}
	
	/**
	 * @MatixParam的用法(矩阵参数),如:GET:/matixParam/wenqiang;sex=male;age=23
	 * @param name
	 * @return
	 */
	@Path("/matixParam/{name}")
	@GET
	public String matixParam(@PathParam("name") String name,
							@MatrixParam("sex") String sex,
							@MatrixParam("age") int age){
		return "name is " + name +" age is " + age +" sex is "+sex;
	}
	
	/**
	 * 使用@PathParam和PathSegment来实现MatixParam
	 * 当矩阵参数中存在着相同的参数使用@MatixParam来获取参数会出现问题,此时应该使用@PathParam和PathSegment实现
	 * GET:/matixParam/wenqiang;sex:male;age:23
	 * @return
	 */
	@Path("/pathSegment/{info}")
	@GET
	public String pathSegment(@PathParam("info") PathSegment info){
		StringBuffer sb = new StringBuffer("name is ");
		 MultivaluedMap<String, String> paraMap = info.getMatrixParameters();
		 /**
		  * 也可以使用迭代器
		  */
		/* for(Iterator<String> it = paraMap.keySet().iterator();it.hasNext();){
			 String temp = paraMap.get(it.next()).get(0);
		 }*/
		 String temp = paraMap.get("name").get(0);
		 sb.append(temp);
		 temp = paraMap.get("age").get(0);
		 sb.append(" age is " + temp);
		 temp = paraMap.get("sex").get(0);
		 sb.append(" sex is " + temp);
		 return sb.toString();
	}
	
	/**
	 * @CookieParam的用法
	 * @param cookie
	 * @param sum
	 * @param sessionid
	 * @return
	 */
	@Path("/cookieParam/{cookieName}")
	@GET
	public String cookieParam(@PathParam("cookieName") String cookie,
							@QueryParam("sum") int sum,
							@CookieParam("JSESSIONID") String sessionid){
		
		return "cookieName is " + cookie + "sessionId is " + sessionid + " sum is " + sum;
	}
	
	/**
	 * @FormParam的用法,通过form表单传递值
	 * @param name
	 * @param firstname
	 * @param secondname
	 * @return
	 */
	@Path("/formParam/{name}")
	@POST
	public String formParam(@PathParam("name") @DefaultValue("limin") String name,
							@FormParam("firstname") String firstname,
							@FormParam("secondname") String secondname){
		
		return name+ " firstname is " + firstname + " secondname is " + secondname;
	}
	
	/**
	 * @Form的用法,使用@Form可以把其他的@*Param的类型的参数放在同一个类中
	 * @return
	 */
	@Path("/form")
	@GET
	public String form(@Form FormEntity entity){
		return entity.toString();
	}
	
	/**
	 * @Context的用法,@Context只允许注入以下这些类的实例:
	 * javax.ws.rs.core.HttpHeaders
	 * javax.ws.rs.core.UriInfo
	 * javax.ws.rs.core.Request
	 * javax.servlet.HttpServletRequest
	 * javax.servlet.HttpServletResponse
	 * javax.servlet.ServletConfig
	 * javax.servlet.ServletContext
	 * javax.ws.rs.core.SecurityContext
	 * @param headers
	 * @return
	 */
	@Path("/context")
	@POST
	public String context(@Context HttpHeaders headers,String content){
		
		JSONObject jsonObject = JSONObject.parseObject(content);
		String name = jsonObject.getString("name");
		int age = jsonObject.getIntValue("age");
		return name+","+age;
	}
}

大家通过看上面的例子应该发现了resteasy的使用方式和springmvc的使用方式很相似,下面我来详细讲解这些注解的意思:
1、@Path相当于springmvc中的@RequestMapping,就是标识请求路径,使用@Path来标识resteasy的请求路径,在@Path中可以含有通配符,大概就三种方式,上面代码中都有注释讲解,如果还有童鞋对于通配符不知道是什么东西,花点时间去了解一些。
2、@GET,@POST,@PUT,@DELETE这些表示请求该路径的方法,和springmvc中的RequestMethod.GET等,一般我们常用的就是@GET和@POST
3、@PathParam,这个表示的是获取路径中的参数,在路径中用{}包含
4、@QueryParam,这个表示的是路径中的参赛,用&连接
5、@HeadParam,这个表示httpheader中的数据
6、@MatixParam,这个表示的获取路径中的矩阵参数
7、@PathParam和Segment混合同样可以实现和@MatixParam一样的效果
8、@CookieParam,顾名思义获取cookie中的信息
9、@FormParam,表单传递
10、@Form,可以包含其他的@*Param
11、如果传递的是Json数据的,不需要使用注解,直接在参数列表中声明变量,然后再解析出来
12、大家可以通过使用httpclient来代码级别访问,同时为大家介绍一个chrome的httpclient插件postman
以上就是resteasy的基本开发,很简单吧,大家赶紧试试把,后续为大家带来springmvc处理请求的一些知识,敬请期待!我们下期再见!
resteasy的文档:http://docs.jboss.org/resteasy/docs/3.0.7.Final/userguide/html/index.html

1
0
分享到:
评论
2 楼 smallplum 2014-06-24  
spring mvc本身就可以实现restful,而且更加方便,再整合resteasy不是蛋疼么
http://www.meiriyouke.net/?p=417
1 楼 aslijiasheng 2014-06-23  
rmi跟其比如何

相关推荐

    使用RESTEasy构建WebService简介

    使用RESTEasy框架构建WebService的整个过程,从项目初始化、资源类的编写、服务类的实现、拦截器的使用、文件上传的处理、与Spring框架的集成,以及前端请求的编码问题解决等方面都提供了一个清晰的开发指南。...

    对WebService的系统研究, 七种方式实现!

    5. **Spring Boot与Spring Cloud Contract**:结合Spring Boot的快速开发特性,Spring Cloud Contract可以用于生成服务器端的WebService接口以及客户端的测试桩。这种方式强调了消费者驱动的契约,确保服务提供者和...

    restful:基于resteasy实现的restful webservice。和spring mvc结合起来使用。部署在tomcat和jboss中都可以。jboss中包含了部分restful的基础jar

    restful 基于resteasy实现的restful webservice。和spring mvc结合起来使用。部署在tomcat和jboss中都可以。jboss中包含了部分restful的基础jar。

    云门户rest开发

    总结来说,云门户REST开发涉及的技术栈包括:RESTful API设计、RESTEasy作为JAX-RS实现、Spring框架进行依赖注入和管理、Apache Tomcat作为服务器,以及使用Eclipse进行开发。在实践中,还需要理解HTTP协议、Java ...

    java调用webservice的各种方法总结

    Java调用Web服务(Web Service)是开发过程中常见的任务,主要涉及如何与远程服务进行交互。Web服务通常基于SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)架构,而Java提供了...

    Resteasy JAX-RS 3.0.6-all.zip最新官方zip包

    对于开发人员来说,Resteasy使得构建RESTful服务变得更加便捷和高效。 在压缩包中,"resteasy-jaxrs-3.0.6.Final"是核心库文件,它包含了Resteasy框架的所有必要组件,包括用于处理HTTP请求和响应的核心类、解析和...

    Jersey和Tomcat构建RESTful WebService

    在JAX-RS出现之前,虽然有诸如Restlet和RestEasy这样的框架可用于实现RESTful Web服务,但这些框架并不够直观易用。 **Jersey** 是JAX-RS的参考实现,它由三个主要部分组成: 1. **核心服务器(Core Server)**:...

    Java RESTful Plugin for Eclipse:用户可以一键创建 Java RESTful Web 服务。-开源

    用于 Eclipse 的 RESTful 插件帮助用户一键创建 RESTful ... 1) Spring RESTful Webservice 2) Jersey RESTful Webservice 3) RESTEasy RESTful Webservice 4) Restlet RESTful Webservice URL:http://oneclicklabs.io

    开启并请求web服务

    2. JAX-RS(Java API for RESTful Web Services):用于构建RESTful Web服务,如Jersey、RESTEasy和Spring MVC等实现。 三、开启Web服务 1. 创建服务端:使用JAX-WS或JAX-RS,定义服务接口和实现,然后部署到应用...

    RESTful Java Web Services

    1. **选择合适的框架**:Java提供了多种用于开发RESTful Web服务的框架,包括Spring Boot、Jersey和RestEasy等。Spring Boot因其强大的生态系统和简化配置的功能而受到广泛欢迎;Jersey则是Java EE 7标准的一部分,...

    毕业论文-计算机专业

    - Java框架:如Jersey、RestEasy等,简化RESTful服务的开发过程。 - 多层架构:分为表现层、业务逻辑层、数据访问层等,确保服务的层次清晰。 3. **jQuery**: - 简介:一款轻量级JavaScript库,简化HTML文档...

Global site tag (gtag.js) - Google Analytics