设为首页 收藏本站
查看: 552|回复: 0

[经验分享] Apache CXF REST example

[复制链接]

尚未签到

发表于 2018-11-22 08:07:52 | 显示全部楼层 |阅读模式
  原地址:http://blog.csdn.net/unei66/article/details/12324353
  本文包括apache cxf rest的基本例子,文件上传,form提交和json提交。
1. 新建java project,导入apache cxf中lib下的所有jar包,项目目录如下:

2. 基本例子
2.1 项目代码
  IBookService.java
  [java] view plaincopy

  •   package com.unei.service;

  •   import java.util.List;

  •   import javax.ws.rs.GET;
  •   import javax.ws.rs.HeaderParam;
  •   import javax.ws.rs.MatrixParam;
  •   import javax.ws.rs.Path;
  •   import javax.ws.rs.PathParam;
  •   import javax.ws.rs.QueryParam;
  •   import javax.ws.rs.core.Response;

  •   /**
  •   * basic examples
  •   * @author Administrator
  •   */
  •   @Path("/book")
  •   public interface IBookService {
  •   @GET
  •   public Response getBooks();

  •   /**
  •   * @PathParam 测试
  •   * @param id
  •   * @return
  •   */
  •   @GET
  •   @Path("/id/{id}")
  •   public Response getBook(@PathParam("id")int id);

  •   /**
  •   * @QueryParam 测试
  •   * url:http://localhost:9000/rest/book/page?from=1&to=10&order=sadf
  •   * @param from
  •   * @param to
  •   * @return
  •   */
  •   @GET
  •   @Path("/page")
  •   public Response getBookById(
  •   @QueryParam("from")int from,
  •   @QueryParam("to")int to,
  •   @QueryParam("order")List order);

  •   /**
  •   * @MatrixParam 测试
  •   * url:http://localhost:9000/rest/book/matrix/2013;author=tom;country=china
  •   * @param year
  •   * @param author
  •   * @param country
  •   * @return
  •   */
  •   @GET
  •   @Path("/matrix/{year}")
  •   public Response getBookByMatrix(@PathParam("year")String year,
  •   @MatrixParam("author")String author,
  •   @MatrixParam("country")String country);
  •   /**
  •   * @HeaderParam 测试
  •   * 获取http头信息
  •   * url:http://localhost:9000/rest/book/getHeader
  •   * @param userAgent
  •   * @return
  •   */
  •   @GET
  •   @Path("/getHeader")
  •   public Response getHeader(@HeaderParam("user-agent")String userAgent);
  •   }
  BookService.java
  [java] view plaincopy

  •   package com.unei.service.impl;

  •   import java.io.File;
  •   import java.io.FileNotFoundException;
  •   import java.io.FileOutputStream;
  •   import java.io.IOException;
  •   import java.io.InputStream;
  •   import java.io.OutputStream;
  •   import java.util.List;

  •   import javax.ws.rs.core.Response;
  •   import javax.ws.rs.core.Response.ResponseBuilder;

  •   import org.apache.cxf.jaxrs.ext.multipart.Attachment;

  •   import com.unei.service.IBookService;

  •   public class BookService implements IBookService{

  •   @Override
  •   public Response getBooks() {
  •   System.out.println("getBooks is called...");
  •   return Response.ok().entity("").build();
  •   }

  •   @Override
  •   public Response getBook(int id) {
  •   System.out.println("getBook is called...");
  •   return Response.ok().entity(id).build();
  •   }

  •   @Override
  •   public Response getBookById(int from
  •   , int to,List order){
  •   System.out.println("getBookById is called...");
  •   return Response.ok().entity("from "+from+" to "+to+" order by "+order.toString()).build();
  •   }

  •   @Override
  •   public Response getBookByMatrix(String year, String author, String country) {
  •   System.out.println("getBookByMatrix is called...");
  •   return Response.ok().entity("year:"+year+",author:"+author+",country:"+country).build();
  •   }

  •   @Override
  •   public Response getHeader(String userAgent) {
  •   System.out.println("getHeader is called...");
  •   return Response.ok().entity(userAgent).build();
  •   }




  •   }
2.2 测试
  启动服务器(Server.java)后,在浏览器中输入代码注释中的url。
3. 文件上传下载,form提交
3.1 程序代码
  IUploadService.java
  [java] view plaincopy

  •   package com.unei.service;

  •   import java.util.List;

  •   import javax.servlet.http.HttpServletRequest;
  •   import javax.ws.rs.Consumes;
  •   import javax.ws.rs.GET;
  •   import javax.ws.rs.POST;
  •   import javax.ws.rs.Path;
  •   import javax.ws.rs.Produces;
  •   import javax.ws.rs.core.Context;
  •   import javax.ws.rs.core.Response;

  •   import org.apache.cxf.jaxrs.ext.multipart.Attachment;
  •   import org.apache.cxf.jaxrs.ext.multipart.Multipart;

  •   /**
  •   * 文件上传service
  •   * @author Administrator
  •   *
  •   */
  •   @Path("/upload")
  •   public interface IUploadService {
  •   /**
  •   * 文本文档下载
  •   * url:http://localhost:9000/rest/upload/dlText
  •   * @return
  •   */
  •   @GET
  •   @Path("dlText")
  •   @Produces("text/plain")
  •   public Response downloadText();

  •   /**
  •   * 表单提交,文件上传
  •   * @return
  •   */
  •   @POST
  •   @Path("/upload")
  •   @Consumes("multipart/form-data")
  •   public Response uploadFileByForm(
  •   @Multipart(value="id",type="text/plain")String id,
  •   @Multipart(value="name",type="text/plain")String name,
  •   @Multipart(value="file",type="image/png")Attachment image);

  •   /**
  •   * 多文件上传
  •   * @param attchments
  •   * @param request
  •   * @return
  •   */
  •   @POST
  •   @Path("/uploadlist")
  •   @Consumes("multipart/form-data")
  •   public Response uploadFileList(Listattachments,@Context HttpServletRequest request);
  •   }
  UploadService.java
  [java] view plaincopy

  •   package com.unei.service.impl;

  •   import java.io.ByteArrayOutputStream;
  •   import java.io.File;
  •   import java.io.FileNotFoundException;
  •   import java.io.FileOutputStream;
  •   import java.io.IOException;
  •   import java.io.InputStream;
  •   import java.io.OutputStream;
  •   import java.util.Iterator;
  •   import java.util.List;
  •   import java.util.Map;

  •   import javax.activation.DataHandler;
  •   import javax.servlet.http.HttpServletRequest;
  •   import javax.ws.rs.core.MediaType;
  •   import javax.ws.rs.core.Response;
  •   import javax.ws.rs.core.Response.ResponseBuilder;

  •   import org.apache.cxf.jaxrs.ext.multipart.Attachment;

  •   import com.unei.service.IUploadService;

  •   public class UploadService implements IUploadService {
  •   @Override
  •   public Response downloadText() {
  •   File file = new File("D:\\test.txt");
  •   ResponseBuilder response = Response.ok(file);
  •   response.header("Content-Disposition", "attachment;filename='test.txt'");
  •   return response.build();
  •   }

  •   @Override
  •   public Response uploadFileByForm(String id, String name, Attachment image) {
  •   System.out.println("id:" + id);
  •   System.out.println("name:" + name);
  •   DataHandler dh = image.getDataHandler();

  •   try {
  •   InputStream ins = dh.getInputStream();
  •   writeToFile(ins, "D:\\upload\\" + dh.getName());
  •   } catch (Exception e) {
  •   e.printStackTrace();
  •   }

  •   return Response.ok().entity("ok").build();
  •   }

  •   @Override
  •   public Response uploadFileList(List attachments,
  •   HttpServletRequest request) {
  •   if (attachments.size() > 0)
  •   System.out.println("ok");

  •   for (Attachment attach : attachments) {
  •   DataHandler dh = attach.getDataHandler();
  •   System.out.println(attach.getContentType().toString());

  •   if (attach.getContentType().toString().equals("text/plain")) {
  •   try {
  •   System.out.println(dh.getName());
  •   System.out.println(writeToString(dh.getInputStream()));
  •   } catch (Exception e) {
  •   e.printStackTrace();
  •   }
  •   } else {
  •   try {
  •   writeToFile(dh.getInputStream(),
  •   "D:\\upload\\" + dh.getName());
  •   } catch (IOException e) {
  •   e.printStackTrace();
  •   }
  •   }
  •   }
  •   return Response.ok().entity("ok").build();
  •   }

  •   private void writeToFile(InputStream ins, String path) {
  •   try {
  •   OutputStream out = new FileOutputStream(new File(path));
  •   int read = 0;
  •   byte[] bytes = new byte[1024];

  •   while ((read = ins.read(bytes)) != -1) {
  •   out.write(bytes, 0, read);
  •   }
  •   out.flush();
  •   out.close();
  •   } catch (FileNotFoundException e) {
  •   e.printStackTrace();
  •   } catch (IOException e) {
  •   e.printStackTrace();
  •   }
  •   }

  •   private String writeToString(InputStream ins) throws Exception {
  •   ByteArrayOutputStream out = new ByteArrayOutputStream();
  •   byte[] b = new byte[1024];
  •   int i = -1;
  •   while ((i = ins.read(b)) != -1) {
  •   out.write(b, 0, i);
  •   }
  •   ins.close();
  •   return new String(out.toByteArray(), "UTF-8");
  •   }
  •   }
3.2 测试
  测试使用两种方法,一种使用html页面,另一种使用HttpClient测试。
3.2.1 html测试代码:
  uploadFileByForm.html
  [html] view plaincopy

  •   
  •   
  •   
  •   
  •   Insert title here
  •   
  •   
  •   
  •   id:
  •   name:
  •   image:
  •   
  •   
  •   
  •   
  uploadFileList.html
  [html] view plaincopy

  •   
  •   
  •   
  •   
  •   Insert title here
  •   
  •   
  •   
  •   id:
  •   name:
  •   image:
  •   image2:
  •   
  •   
  •   
  •   
3.2.2 html测试
  启动服务器后(server.java),提交表单
3.2.3 HttpClient 测试
  3.2.3.1 新建java project项目,添加apache cxf/lib 中所有jar包,项目结构如下

  需额外添加jar包:
  httpmime-4.2.3.jar
  apache-mime4j-core-0.7.2.jar
  3.2.3.2 项目代码
  Client.java
  [java] view plaincopy

  •   package com.unei.app;

  •   import java.io.File;
  •   import java.nio.charset.Charset;

  •   import org.apache.http.client.HttpClient;
  •   import org.apache.http.client.methods.HttpPost;
  •   import org.apache.http.entity.mime.MultipartEntity;
  •   import org.apache.http.entity.mime.content.FileBody;
  •   import org.apache.http.entity.mime.content.StringBody;
  •   import org.apache.http.impl.client.DefaultHttpClient;


  •   public class Client {

  •   public static void main(String[] args) throws Exception {
  •   MultipartEntity entity=new MultipartEntity();
  •   entity.addPart("id",new StringBody("newid", Charset.forName("UTF-8")));
  •   entity.addPart("name",new StringBody("newName",Charset.forName("UTF-8")));
  •   entity.addPart("file1",new FileBody(new File("D:\\test.txt")));

  •   HttpPost request=new HttpPost("http://localhost:9000/rest/upload/uploadlist");
  •   request.setEntity(entity);
  •   HttpClient client=new DefaultHttpClient();
  •   client.execute(request);
  •   }

  •   }
4. json提交
4.1 代码
  Book.java
  [java] view plaincopy

  •   package com.unei.bean;

  •   import javax.xml.bind.annotation.XmlRootElement;

  •   @XmlRootElement(name = "book")
  •   public class Book {
  •   private int bookId;
  •   private String bookName;

  •   public int getBookId() {
  •   return bookId;
  •   }

  •   public void setBookId(int bookId) {
  •   this.bookId = bookId;
  •   }

  •   public String getBookName() {
  •   return bookName;
  •   }

  •   public void setBookName(String bookName) {
  •   this.bookName = bookName;
  •   }

  •   public String toString(){
  •   return "[bookId:"+bookId+"],[bookName:"+bookName+"]";
  •   }
  •   }
  IJsonService.java
  [java] view plaincopy

  •   package com.unei.service;

  •   import java.util.List;

  •   import javax.ws.rs.Consumes;
  •   import javax.ws.rs.POST;
  •   import javax.ws.rs.Path;
  •   import javax.ws.rs.core.Response;

  •   import com.unei.bean.Book;

  •   @Path("/json")
  •   public interface IJsonService {
  •   /**
  •   * JSON提交
  •   * url:http://localhost:9000/rest/json/addBook
  •   * Json format:{"book":{"bookId":123,"bookName":"newBook"}}
  •   * @param book
  •   * @return
  •   */
  •   @POST
  •   @Path("/addBook")
  •   @Consumes("application/json")
  •   public Response addBook(Book book);

  •   /**
  •   * Json提交2
  •   * url:http://localhost:9000/rest/json/addBooks
  •   * Json format:{"book":[{"bookId":123,"bookName":"newBook"},{"bookId":456,"bookName":"newBook2"}]}
  •   * @param books
  •   * @return
  •   */
  •   @POST
  •   @Path("/addBooks")
  •   @Consumes("application/json")
  •   public Response addBooks(List books);
  •   }
  JsonService.java
  [java] view plaincopy

  •   package com.unei.service.impl;

  •   import java.util.List;

  •   import javax.ws.rs.core.Response;

  •   import com.unei.bean.Book;
  •   import com.unei.service.IJsonService;

  •   public class JsonService implements IJsonService{

  •   @Override
  •   public Response addBook(Book book) {
  •   System.out.println("addBook is called...");
  •   return Response.ok().entity(book.toString()).build();
  •   }

  •   @Override
  •   public Response addBooks(List books) {
  •   System.out.println("addBooks is called...");
  •   return Response.ok().entity("ok").build();
  •   }

  •   }
4.2 测试
  测试使用Firefox扩展程序poster。
  测试1:


  测试2:


5.服务器启动代码
  Server.java
  [java] view plaincopy

  •   package com.unei.app;

  •   import java.util.ArrayList;
  •   import java.util.List;

  •   import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
  •   import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
  •   import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;

  •   import com.unei.service.impl.BookService;
  •   import com.unei.service.impl.JsonService;
  •   import com.unei.service.impl.UploadService;

  •   public class Server {

  •   @SuppressWarnings({ "unchecked", "rawtypes" })
  •   public Server() {
  •   JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
  •   List clazzs=new ArrayList();
  •   clazzs.add(BookService.class);
  •   clazzs.add(UploadService.class);
  •   clazzs.add(JsonService.class);
  •   sf.setResourceClasses(clazzs);
  •   List rps=new ArrayList();
  •   for(int i=0;i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-637972-1-1.html 上篇帖子: Apache与Tomcat 区别联系​ 下篇帖子: Apache+Nginx防止恶意解析配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表