|
原地址: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
|
|
|