加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

RestEasy开发WebService一

发布时间:2020-12-16 23:35:21 所属栏目:安全 来源:网络整理
导读:1.搭建RestEasy项目 基于resteasy版本:2.2.1.GA 使用maven2.2.1作为构建和依赖管理工具 1.创建工程,配置pom.xml mvn archetype:create -DgroupId=com.longtask.rest.easyrest -DartifactId=easyrest -DarchetypeArtifactId=maven-archetype-webapp mvn ecl

1.搭建RestEasy项目

基于resteasy版本:2.2.1.GA

使用maven2.2.1作为构建和依赖管理工具

1.创建工程,配置pom.xml

mvn archetype:create -DgroupId=com.longtask.rest.easyrest -DartifactId=easyrest -DarchetypeArtifactId=maven-archetype-webapp

mvn eclipse:eclipse

注:使用m2eclipse插件可直接import
[html]? view plain copy
  1. <project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
  2. ??xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/maven-v4_0_0.xsd">??
  3. ??modelVersion>4.0.0</>??
  4. ??groupId>rest.resteasyartifactId>rest-resteay-demopackaging>warversion>1.0name>rest-resteay-demo?Maven?Webappurl>http://maven.apache.orgrepositories ????????repository ????????????id>java.net ????????????>http://download.java.net/maven/1layout>legacy ????????>maven?repo>http://repo1.maven.org/maven2/ ????????<!--?For?resteasy?-->??
  5. >jboss>jboss?repo>http://repository.jboss.org/nexus/content/groups/public/ ????dependenciesdependency>org.jboss.resteasy>resteasy-jaxrs>2.2.1.GA ????????????<!--?filter?out?unwanted?jars?-->??
  6. exclusions ????????????????exclusion ????????????????????>commons-httpclient ???????????????????? ????????????????>javax.servlet>servlet-api>javax.xml.bind>jaxb-api>com.sun.xml.bind>jaxb-impl ??
  7. >resteasy-jettison-provider>javax.xml.stream>stax-api ??????>junit ??????>3.8.1scope>test ???? ?buildfinalNamepluginsplugin>org.apache.maven.plugins>maven-compiler-pluginconfigurationsource>1.6targetproject>??
这个不是重点:看不懂这个pom.xml没关系,也就是下载依赖包,打包,先继续往下看

2.编写jax-rs的服务类

[java]? copy
    package?resteasy.server;??
  1. ??
  2. import?javax.ws.rs.GET;??
  3. import?javax.ws.rs.Path;??
  4. import?javax.ws.rs.PathParam;??
  5. @Path(value?=?"echo")??
  6. public?class?Echo?{??
  7. ????@GET??
  8. ????@Path(value?=?"/{message}")??
  9. ????public?String?echoService(@PathParam("message")?String?message)??
  10. ????{??
  11. ????????return?message;??
  12. ????}??
  13. }??

@Path表示开启访问这个资源的路径

@GET表示响应HTTP 的get方法

@PathParam表示引用URI中得参数

3.web.xml的配置

copy
    <!DOCTYPE?web-app?PUBLIC??
  1. ?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"??
  2. ?"http://java.sun.com/dtd/web-app_2_3.dtd"?web-appcontext-paramparam-name>resteasy.resourcesparam-value>resteasy.server.Echo ???listenerlistener-class ?????????org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap??
  3. servletservlet-name>Resteasyservlet-class ?????????org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher??
  4. ???servlet-mappingurl-pattern>/*配置响应的listener和servlet无非就是初始resteasy的服务 (先简单理解)

    3.打包部署到响应的servlet容器即可(如tomcat),然后访问http://localhost:8080/rest-resteay-demo/echo/hello,world,网页上出现hello,world则成功
    hello,world可换成任意字符,同样也将返回响应的字符

    注:如果不使用maven,则可以到resteasy官网下载响应jar包即可


    1.使用的?ServletContextListener 来初始化并发布我们的服务类

    [html]? view plain copy
      span?style="color:#000000;">?<!DOCTYPE?web-app?PUBLIC????
    1. ?????"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"????
    2. ?????"http://java.sun.com/dtd/web-app_2_3.dtd"?>??????
    3. >????
    4. ?>????
    5. >???
    6. >?org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap?>???
    7. >?>?org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher?>span>??


     
    这是第一波中得web.xml,也就是用的listener来进行的服务发布: 
    

    查看源代码可以发现public class ResteasyBootstrap implements ServletContextListener,其实现了ServletContextListener 接口,通过获取

    copy
      ??????????? ??????????? ???????>????
    如上参数进行了服务类的加载.

    copy
      resteasy.resources??
    代表通过指定资源类的全路径名进行加载,有多个资源类可通过逗号分开
    查看官方文档可以发现其他用于加载资源类的参数

    resteasy.scan.resources?? 默认值:false?? 用途:设置为ture时,将自动搜索 WEB-INF/lib下面的 jars 和 WEB-INF/classes目录中有(@GET @POST ...)注解的class并注册为服务
    可用上一波的例子替换相应参数进行测试(亲测木有问题)
    2.使用?servlet Filter?注册服务类web.xml如下
    [html]? view plain copy
      <!DOCTYPE?web-app?PUBLIC??
    1. >??
    2. ??
    3. >??
    4. ?????????org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher??
    5. ???????init-param>javax.ws.rs.Application>resteasy.server.MyApplication>??
    如上代码,我们发现相比前面例子去掉了listener,在servlet中多添加了一个
    copy
      javax.ws.rs.Application??
    这是一个抽象类,是一个jax rs的标准规范,允许通过其子类注册你得资源类请看MyApplication代码
    [java]? copy
      package?resteasy.server;??
    1. import?java.util.HashSet;??
    2. import?java.util.Set;??
    3. ??
    4. import?javax.ws.rs.core.Application;??
    5. class?MyApplication?extends?Application{??
    6. ????Set<Object>?objectSet?=?new?HashSet<Object>();??
    7. ????Set<Class<?>>?classSet?=?new?HashSet<Class<?>>();??
    8. ??????
    9. public?MyApplication()??
    10. ????{??
    11. ????????objectSet.add(new?Echo());??
    12. //??????classSet.add(Echo.class);??
    13. ????}??
    14. @Override??
    15. public?Set<Class<?>>?getClasses()?{??
    16. ????????//?TODO?Auto-generated?method?stub??
    17. return?classSet;??
    18. ????}??
    19. public?Set<Object>?getSingletons()?{??
    20. return?objectSet;??
    21. ??????
    22. }??
    通过构造函数添加了一个Echo的资源类实例,当然也可通过添加一个class来实现,二者选其一即可 3.使用?filter?注册服务类(也就是资源类)

    作为servlet进行资源的注册,你会发现不能将静态文件(html,images)注册为资源,所以resteasy还提供了filter进行资源的注册,不妨碍其获取静态文件

    继续引用上一个例子,只用修改其web.xml如下

    copy

      filterfilter-namefilter-class ????????????????org.jboss.resteasy.plugins.server.servlet.FilterDispatcher??
    1. filter-mapping>??

    实现文件上传---非form提交方式(实例、教程)

    这里指的上传是指利用resteasy来获取:客户端HTTP开发包发送的body请求-----刚开始也没撒头绪,第一时间去google,发现有哥们问同样的问题,但是却没有解决方法,于是乎就只有硬着头皮看英文文档,发现如下文档:

    The @Context annotation allows you to inject instances of 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,and javax.ws.rs.core.SecurityContext objects.

    翻译下呢就是说使用@Context 注解就可以将?javax.ws.rs.core.HttpHeaders,and javax.ws.rs.core.SecurityContext等等实例注入到变量中

    server端resource类代码如下:

    [html]? view plain copy
      @PUT??
    1. @Path(value?=?"/{folder}/{fileName}")??
    2. public?Response?uploadFile(@PathParam("folder")?String?folder,@PathParam("fileName")?String?fileName,?????@Context?HttpServletRequest?request)??
    3. {??
    4. ????File?f?=?new?File("x:"+fileName);??
    5. ????InputStream?is?=?null;??
    6. ????try?{??
    7. ????????is?=?request.getInputStream();??
    8. ????????FileUtils.copyInputStreamToFile(is,?f);??
    9. ????}?catch?(IOException?e)?{??
    10. ????????//?TODO?Auto-generated?catch?block??
    11. ????????e.printStackTrace();??
    12. ????}??
    13. ????return?Response.ok().build();??
    14. }??

    请主要看下以上代码红色部分,就相当于把HttpServletRequest请求注入到了request变量中,那么通过request对象获取获取输入流,则得到了body主体部分的数据。 客户端的代码如下

    copy

      String?urlResouce?=?"http://localhost:8080/cloud-storeage-boss/muluSDF/xyz.png";?//?create?URL??
    1. ????????File?localFile?=?new?File("C:UsersmaomaoPictures2.png");??
    2. ????????try{??
    3. ??????????????
    4. ????????HttpURLConnection?urlConnection?=??
    5. ????????(HttpURLConnection)?(new?URL(urlResouce)).openConnection();??
    6. ????????urlConnection.setDoInput(true);??
    7. ????????urlConnection.setDoOutput(true);??
    8. ????????urlConnection.setRequestMethod("PUT");??
    9. ????????OutputStream?urlOutputStream?=?urlConnection.getOutputStream();??
    10. ????????FileInputStream?fileInputStream?=?new?FileInputStream(localFile);??
    11. ????????IOUtils.copy(fileInputStream,?urlOutputStream);??
    12. ????????fileInputStream.close();??
    13. ????????urlOutputStream.close();??
    14. ????????System.out.println(urlConnection.getResponseCode());??
    15. ????????}??
    16. ????????catch(Exception?e)??
    17. ????????{??
    18. ????????????e.printStackTrace();??
    19. ????????} ?
    通过此客户端的调用,就可以将本地的2.png文件上传到服务器,并被保存为xyz.png.

    resteasy与spring真正集成发布我们的restful webservice 服务(实例、教程)

    原本以为根据文档集成resteasy与spring很简单,但是却还是花费的一定时间,避免大家走弯路----现在网上有的相关的集成都只是,spring加入进项目,木有与resteasy真正集成

    老规矩,先上MAVEN的配置文件中依赖包:

    [html]? view plain copy
      ?>??
    1. ???<!--?core?library?-->??
    2. >??
    3. ??
    4. ???<!--?optional?modules?-->??
    5. ?????<!--?Spring?integration?-->??
    6. >resteasy-spring ??????
    7. <!--?JAXB?support?-->??
    8. >resteasy-jaxb-provider ??????
    9. <!--?spring?-->??
    10. >org.springframework>spring ????????????????????????????????>2.5.6.SEC03 ???????????????????????>??

    注意上图中得resteasy-spring模块依赖,和spring依赖

    resteasy-spring直接配置似乎不能自动下载,如果不行可以自己去官网下载然后安装到私服仓库

    还有spring的依赖必须是要有的,resteasy-spring只是提供集成代码

    2.关键的web.xml中得配置

    copy
      <!DOCTYPE?web-app?PUBLIC??
    1. display-name>Archetype?Created?Web?Application>contextConfigLocation>classpath*:applicationContext*.xml ??<!--??
    2. >??????
    3. >resteasy.scan.resources>true ????-->org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher ????
    4. >??
    相比原来的配置文件多了

    copy
      >??

    copy
      >??

    3.application.xml的配置

    copy
      <?xml?version="1.0"?encoding="UTF-8"?>??
    1. beans?xmlns="http://www.springframework.org/schema/beans"??
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans??
    4. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd?">???
    5. ????<!--?service?point?-->??
    6. bean?id="testServicePoint"?class="com.jd.interfacce.service.point.TestServicePoint"property?name="manager"?ref="manager"?/>??
    7. bean<!--?MANAGER?-->??
    8. bean?id="manager"?class="com.jd.interfacce.manager.impl.ManagerImpl"/>??
    9. beans>??
    其中
    copy
      testServicePoint??

    是我们的资源resouce也就是发布接口的类

    4.资源类

    [java]? copy
      package?com.jd.interfacce.service.point;??
    1. import?javax.ws.rs.GET;??
    2. import?javax.ws.rs.Path;??
    3. import?javax.ws.rs.PathParam;??
    4. import?com.jd.interfacce.manager.Manager;??
    5. /**?
    6. ?*?service?point?endpoint?
    7. ?*?@author??
    8. ?*?
    9. ?*/??
    10. @Path(value?=?"/")??
    11. class?TestServicePoint?{??
    12. ????Manager?manager;??
    13. @GET??
    14. @Path(value?=?"/echo/{message}")??
    15. public?String?getMessage(@PathParam(value?=?"message")?String?message)??
    16. ????{??
    17. //??????return?message;??
    18. ????????return?manager.getMessage(message);??
    19. ????}??
    20. public?Manager?getManager()?{??
    21. return?manager;??
    22. ????void?setManager(Manager?manager)?{??
    23. this.manager?=?manager;??
    24. ????}??
    25. }??
    5.manager类

    copy
      package?com.jd.interfacce.manager.impl;??
    1. class?ManagerImpl?implements?Manager{??
    2. @Override??
    3. public?String?getMessage(String?message)??
    4. return?message;??
    5. } ?

    利用resteasy框架构建rest webservice----第五波:java代码调用乱码解决方案

    今天主要介绍下当URI中出现中文时,服务端获取出得Pathparam为乱码的问题:
    [java]? view plain copy
      String?urlResouce?=?null;??
    1. try?{??
    2. ????????????urlResouce?=?"http://10.28.0.203:8080/cloud-storeage-boss/cai:dafile/"+URLEncoder.encode("中文eclipse.zip","utf-8");??
    3. ????????}?catch?(UnsupportedEncodingException?e1)?{??
    4. ????????????//?TODO?Auto-generated?catch?block??
    5. ????????????e1.printStackTrace();??
    6. ????????}?//?create?URL??
    7. ????????File?localFile?=?new?File("Z:toolseclipse-jee-helios-SR2-win32.zip");??
    8. try{??
    9. ??????????????
    10. ????????HttpURLConnection?urlConnection?=??
    11. ????????(HttpURLConnection)?(new?URL(urlResouce)).openConnection();??
    12. ????????urlConnection.setRequestProperty("Charset",?"UTF-8");??
    13. ????????urlConnection.setRequestProperty("auth",?"maomaocaicai");??
    14. ????????urlConnection.setDoInput(true);??
    15. ????????urlConnection.setDoOutput(true);??
    16. ????????urlConnection.setRequestMethod("PUT");??
    17. ????????OutputStream?urlOutputStream?=?urlConnection.getOutputStream();??
    18. ????????FileInputStream?fileInputStream?=?new?FileInputStream(localFile);??
    19. ????????fileInputStream.close();??
    20. ????????urlOutputStream.close();??
    21. ????????System.out.println(urlConnection.getResponseCode());??
    22. ????????}??
    23. catch(Exception?e)??
    24. ????????{??
    25. ????????????e.printStackTrace();??
    26. ????????}??
    乱码参数的解决方法很简单,就是将相应URI进行UTF-8的编码

    这个原理比较简单因为中文时两个字节,而在网络进行传输的时候由于某种原因(具体原因就是编码的问题,请google)会进行单字节的编码,解析出来的中文就变乱码了。----浏览器在传输的时候都会对中文进行编码传输

    实现文件下载

    基于resteasy下载的实现,先贴出下载的代码

    [java]? view plain copy
      /**?
    1. ?????*?下载对象?
    2. ?????*?@param?bucketName?
    3. ?????*?@param?objectName?
    4. ?????*?@param?request?
    5. ?????*?@return?
    6. ?????*/??
    7. @Path(value?=?"/{bucketName}/{objectName}")??
    8. @Produces(MediaType.APPLICATION_OCTET_STREAM)??
    9. public?Response?downloadObject(@PathParam(value?=?"bucketName")?String?bucketName,@PathParam(value?=?"objectName")?String?objectName,100); background-color:inherit">@Context?HttpServletRequest?request)??
    10. ????????BucketObject?bucketObject?=?objectManager.downloadObject(request.getHeader(CommonConstant.USER_TOKEN),CommonsUtil.generateSummary(request),?bucketName,?objectName);??
    11. //直接返回输出流??
    12. return?Response.ok(new?BigFileOutputStream(bucketObject.getDataStream())).build();??

    这段代码比较简单:重点关注响应的实体类BigFileOutputStream,其传入的构造参数是一个输入流

    该类的具体实现如下,其实关键的需要实现javax.ws.rs.core.StreamingOutput类,重写其write方法,将你得数据输出到write方法中得输出流中即可,resteasy框架会将其流直接输出到客户端

    copy
      ?*?实现用于直接响应一个输出流?
    1. ?*?@author?maomao?
    2. ?*?
    3. ?*/??
    4. class?BigFileOutputStream?implements?javax.ws.rs.core.StreamingOutput?{??
    5. private?InputStream?inputStream;??
    6. public?BigFileOutputStream(){}??
    7. public?BigFileOutputStream(InputStream?inputStream)??
    8. this.inputStream?=?inputStream;??
    9. void?write(OutputStream?output)?throws?IOException,??
    10. ????????????WebApplicationException?{??
    11. ????????//?TODO?Auto-generated?method?stub??
    12. ????????IOUtils.copy(inputStream,?output);??
    13. public?InputStream?getInputStream()?{??
    14. return?inputStream;??
    15. void?setInputStream(InputStream?inputStream)?{??
    16. }??
    客户端调用代码如下
    copy
      //下载文件??
    1. private?void?downLoadObject()??
    2. ????{??
    3. ????????String?bucket?=?"EBOXTEST123456";?//上传的桶??
    4. ????????String?objectName?=?"wangpan114daitupian.png";?//上传的对象名??
    5. ????????String?urlResouce?=??bucket?+?"/"?+?objectName;??
    6. ????????String?baseURL?=?"http://10.28.1.37:8080/application_interface_manager/platform/";??
    7. ????????String?hostURL?=?baseURL?+?urlResouce?;??
    8. ????????String?httpMethod?=?"GET";??
    9. ????????String?requestDate?=?new?Date().toString();??
    10. new?File("x:1142.png");??
    11. //生成摘要用于签名??
    12. ????????String?summary?=?httpMethod?+?"n"?//?create?StringToSign??
    13. ????????+?"n"?//?no?Content-Md5?Filed??
    14. ????????+?"n"?//?no?Content-Type?Filed??
    15. ????????+?requestDate?+?"n"?//?Date?Filed---must??
    16. ????????+?urlResouce;?//must??
    17. ????//创建客户端签名??
    18. ????String?clientToken?=?new?CreateSignTokenImpl().getToken(summary,secretKey);??
    19. ????HttpURLConnection?urlConnection?=??
    20. ????(HttpURLConnection)?(new?URL(hostURL)).openConnection();??
    21. ????urlConnection.setRequestProperty("Token",?"jingdong?"+accessKey+":"+clientToken);??
    22. ????urlConnection.setRequestProperty("Date",?requestDate);??
    23. ????urlConnection.setDoInput( ????urlConnection.setRequestMethod(httpMethod);??
    24. ????InputStream?is?=?urlConnection.getInputStream();??
    25. //??FileUtils.copyInputStreamToFile(is,?localFile);??
    26. ????????OutputStream?op?=?new?FileOutputStream(localFile);??
    27. byte?[]?bts?=?new?byte[1024];??
    28. int?n?=?0;??
    29. while(-1?!=?(n?=?is.read(bts)))??
    30. ????????{??
    31. ????????????op.write(bts,?0,?n);??
    32. ????????}??
    33. //??????op.close();??
    34. ????????}?catch?(IOException?e1)?{??
    35. //?TODO?Auto-generated?catch?block??
    36. ????????e1.printStackTrace();??
    37. ????System.out.println(urlConnection.getResponseCode());??
    38. ????????e.printStackTrace();??
    39. ????}??

    其实看着复杂,实际上很多代码不重要(偷懒把项目客户端调用代码直接copy过来了),关键就是从HttpUrlConnect处获取输入流(即是服务端输出流输出的数据),将其写入到文件即可

    我的Demo

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.test.service</groupId>
      <artifactId>RestEasyDemo1</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>RestEasyDemo1 Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <!-- RestEasy的Maven依赖 -->
         <!-- core library -->
       <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-jaxrs</artifactId>
          <version>2.2.1.GA</version>
       </dependency>
    
       <!-- optional modules -->
    
       <!-- JAXB support -->
       <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-jaxb-provider</artifactId>
          <version>2.2.1.GA</version>
       </dependency>
          <!-- 添加json的支持 -->
       <dependency>
    			<groupId>org.jboss.resteasy</groupId>
    			<artifactId>resteasy-jackson-provider</artifactId>
    			<version>2.2.1.GA</version>
    	    </dependency>
       <!-- multipart/form-data and multipart/mixed support -->
       <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-multipart-provider</artifactId>
          <version>2.2.1.GA</version>
       </dependency>
       
      </dependencies>
      <build>
            <finalName>RestEasyDemo1</finalName>  
            <plugins>  
                <plugin>  
                    <groupId>org.apache.maven.plugins</groupId>  
                    <artifactId>maven-compiler-plugin</artifactId>  
                    <configuration>  
                        <source>1.6</source>  
                        <target>1.6</target>  
                    </configuration>  
                </plugin>  
                <plugin>  
            <groupId>org.apache.tomcat.maven</groupId>  
            <artifactId>tomcat6-maven-plugin</artifactId>  
            <version>2.0</version>  
           </plugin>  
            </plugins>  
        </build> 
    </project>
    

    web.xml

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
    	<display-name>Archetype Created Web Application</display-name>
    <!-- Auto scan REST service -->
    	<!-- 自动扫描Service类会报错,这是一个bug,推荐使用手动的 -->
    	<!-- <context-param>
    		<param-name>resteasy.scan</param-name>
    		<param-value>true</param-value>
    	</context-param> -->
    	
    	<!-- 手动注册Service类 -->
    	 <context-param>  
            <param-name>resteasy.resources</param-name>  
            <param-value>com.easytest.service.Library,com.easytest.service.MessageRestService</param-value>  
        </context-param>
     
    	<!-- this need same with resteasy servlet url-pattern -->
    	<!-- <context-param>
    		<param-name>resteasy.servlet.mapping.prefix</param-name>
    		<param-value>/rest</param-value>
    	</context-param> -->
     
    	<listener>
    		<listener-class>
    			org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
    		</listener-class>
    	</listener>
     
    	<servlet>
    		<servlet-name>resteasy-servlet</servlet-name>
    		<servlet-class>
    			org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    		</servlet-class>
    	</servlet>
     
    	<servlet-mapping>
    		<servlet-name>resteasy-servlet</servlet-name>
    		<url-pattern>/*</url-pattern>
    	</servlet-mapping>
    
    </web-app>
    

    服务类:

    import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.ws.rs.FormParam;
    import javax.ws.rs.GET;
    import javax.ws.rs.POST;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    
    import org.jboss.resteasy.annotations.GZIP;
    import org.jboss.resteasy.annotations.providers.multipart.PartType;
    import org.omg.IOP.MultipleComponentProfileHelper;
    
    @Path(value = "/captcha")  
    public class CaptchaService {
    	/**
    	 * 获取验证码
    	 * @param id
    	 * @return
    	 */
    	@GET  
        @Path(value = "/{reqId}/get.htm")
    	@GZIP
    	@Produces("image/png")
    	public File fehchCaptach(@PathParam("reqId") String reqId){
    		System.out.println(reqId);
    		return new File("D:testFTPsuzhou0080200201401040007tailoredBIRTH17_00282529128900101.png");
    	}
    	
    	/**
    	 * 保存验证码
    	 * @param reqId
    	 * @param captcha
    	 * @return
    	 */
    	@POST
        @Path(value = "/post.htm")  
    	@Produces("application/json")
    	public Map<String,String> saveCaptach(@FormParam("reqId") String reqId,@FormParam("captcha") String captcha){
    		System.out.println(reqId+" = "+captcha);
    		Map<String,String> map = new HashMap<String,String>();
    		map.put("reqId",reqId);
    		map.put("status","true");
    		map.put("msg","successfully!");
    		return map;
    	}
    	
    	/**
    	 * 反馈某时间段验证码输入情况(正确/错误)
    	 * @param beginDate 开始日期(yyyymmdd)
    	 * @param endDate 截止日期(yyyymmdd)
    	 * @return
    	 */
    	@GET
        @Path(value = "/{beginDate}/{endDate}/feedback.htm")
    	@Produces("application/json")
    	public List<Map<String,String>> feedback(@PathParam("beginDate") String beginDate,@PathParam("endDate") String endDate){
    		List<Map<String,String>> list = new ArrayList<Map<String,String>>();
    		
    		Map<String,"650fce42dd024983b7e1b6a1a1e0b873");
    		map.put("result","YES");
    		list.add(map);
    		
    		map = new HashMap<String,"25a1df5e9fce4af1bc7f7dcd379d63bb");
    		map.put("result","cb82aa3387b9489d89bac9f963e5c09c");
    		map.put("result","NO");
    		list.add(map);
    		return list;
    	}
    	
    	@GET
        @Path(value = "/feedback/confirm.htm")
    	public void confirm(@PathParam("beginDate") String beginDate,@PathParam("endDate") String endDate){
    		
    	}
    }
    

    package com.easytest.service;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.Response;
    
    import com.easytest.bean.Person;
    
    @Path("/message")
    public class MessageRestService {
    	@GET
    	@Path("/{param}")
    	public Response printMessage(@PathParam("param") String msg) {
     
    		String result = "Restful example : " + msg;
     
    		return Response.status(200).entity(result).build();
     
    	}
    	
    	@GET
    	@Path("/person/{param}")
    	@Produces("application/json")
    	public  List<Map<String,String>> getPerson(){
    		
    		Person p = new Person();
    		p.setId("1111");
    		p.setName("Jack");
    		p.setAge(22);
    		p.setAddress("浦东");
    		
    		List<Map<String,String>>();
    		Map<String,String>();
    		map.put("id",p.getId() );
    		map.put("name",p.getName());
    		map.put("age",p.getAge()+"");
    		map.put("address",p.getAddress());
    		map.put("photo",p.getPhoto());
    		
    		list.add(map);
    		
    		return list;
    	}
    }
    

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读