Apache CXF REST api
来源:互联网 发布:奇迹归来坐骑进阶数据 编辑:程序博客网 时间:2024/05/22 12:52
本文包括apache cxf rest的基本例子,文件上传,form提交和json提交。
1. 新建java project,导入apache cxf中lib下的所有jar包,项目目录如下:
2. 基本例子
2.1 项目代码
IBookService.Java
[java] view plain copy
- 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<String> 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 plain copy
- 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<String> 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 plain copy
- 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(List<Attachment>attachments,@Context HttpServletRequest request);
- }
UploadService.java
注意一下代码中对流的处理(代码中处理是错误的,~~)
try{}finally{
//关闭流
}
[java] view plain copy
- 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<Attachment> 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 plain copy
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <form action="http://localhost:9000/rest/upload/upload" method="post" enctype="multipart/form-data" >
- <p>id:<input type="text" name="id"/></p>
- <p>name:<input type="text" name="name"/></p>
- <p>image:<input type="file" name="file"/>
- <p><input type="submit" value="sub"/></p>
- </form>
- </body>
- </html>
[html] view plain copy
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <form action="http://localhost:9000/rest/upload/uploadlist" method="post" enctype="multipart/form-data" >
- <p>id:<input type="text" name="id"/></p>
- <p>name:<input type="text" name="name"/></p>
- <p>image:<input type="file" name="file"/></p>
- <p>image2:<input type="file" name="file2"/></p>
- <p><input type="submit" value="sub"/></p>
- </form>
- </body>
- </html>
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 plain copy
- 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 plain copy
- 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 plain copy
- 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<Book> books);
- }
JsonService.java
[java] view plain copy
- 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<Book> books) {
- System.out.println("addBooks is called...");
- return Response.ok().entity("ok").build();
- }
- }
4.2 测试
测试使用Firefox扩展程序poster。
测试1:
测试2:
5.服务器启动代码
Server.java
[java] view plain copy
- 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<ResourceProvider> rps=new ArrayList<ResourceProvider>();
- for(int i=0;i<clazzs.size();i++)
- rps.add(new SingletonResourceProvider(clazzs.get(i)));
- sf.setResourceProviders(rps);
- // sf.getInInterceptors().add(new LoggingInInterceptor());
- // sf.getOutInterceptors().add(new LoggingOutInterceptor());
- sf.setAddress("http://localhost:9000/rest");
- sf.create();
- }
- public static void main(String[] args) throws Exception {
- new Server();
- System.out.println("server ready...");
- Thread.sleep(5*6000*1000);
- System.out.println("server existing");
- System.exit(0);
- }
- }
0 0
- Apache CXF REST api
- Apache CXF REST example
- Apache CXF REST example
- Apache CXF REST example
- Apache CXF + Spring3 + REST + JSON配置
- CXF Rest
- 使用Apache CXF搭建REST风格的Web Service
- apache-cxf-3.0.4和spring实现rest服务
- Apache CXF REST 文件上传,form提交和json提交。
- Apache CXF REST 文件上传,中文乱码(已解决)
- 如何部署 apache CXF rest app to Weblogic
- Apache Spark’s Hidden REST API
- CXF Rest Server
- CXF Rest Client
- CXF Rest Server
- cxf rest username验证
- Apache CXF
- Apache CXF
- mysql主键设置了递增,插入语句的写法
- Java正则取文件夹下所有匹配内容
- H5经纬度百度定位不准问题
- 你不可不知的interface(1)-引入及特点
- 【PHP部署 Linux】Linux网站架构系列之PHP部署篇
- Apache CXF REST api
- 104-string和StringBuilder的区别
- Redis有序集合命令ZREVRANGEBYLEX详解与应用
- R 实现GOstats 的方法(特定数据集合的分析)
- mac终端显示和隐藏隐藏文件的命令
- Windows Server 2008通过计划任务定时执行bat文件
- 状态机的两种写法对比
- adb启动应用
- 正则表达式学习笔记NO.1