webservice之jax-rs实现方式
1.什么叫restful风格
restful是一组架构约束条件和原则,满足这些约束条件和原则的应用程序即是restful风格。
2.jax-rs实现步骤
1.创建一个简单应用(略)

2.添加依赖jar包
<!--cxf的客户端和服务端 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.1</version>
</dependency>
<!-- CXF的json转换器,拓展json -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>3.0.1</version>
</dependency>
<!-- 转换json的工具包,被cxf-rt-rs-extension-providers包依赖 -->
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.23</version>
</dependency>
3.配置cxf的servlet
<servlet>
<servlet-name>CXFService</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFService</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
4.配置webservice服务
<jaxrs:server id="userService">
<jaxrs:serviceBeans>
<bean class="cn.cxf.rs.interfaces.impl.UserServiceImpl"></bean>
<bean class="cn.cxf.rs.interfaces.impl.PetImpl"></bean>
</jaxrs:serviceBeans>
<jaxrs:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
</jaxrs:outInterceptors>
</jaxrs:server>
5.代码编写
接口定义
@Path("/userService")
@Produces("*/*")
public interface IUserService {
@POST
@Path("/saveUser")
@Consumes({"application/json"})
@Produces({"application/json"})
User saveUser( User user);
@POST
@Path("/pet/{petId}")
@Consumes({MediaType.APPLICATION_FORM_URLENCODED,MediaType.APPLICATION_XML})
@Produces({"application/json"})
void pet(@PathParam("petId") String petId,@HeaderParam("xcl") String xcl,User user);
@PUT
@Path("/updateUser")
@Consumes({"application/xml","application/json"})
@Produces({"application/json"})
void updateUser(User user);
@GET
@Path("/findAllUsers")
@Produces({"application/json"})
List<User> findAllUsers(@QueryParam("status") String[] status);
@GET
@Path("/findUserById/{id}/{name}")
@Produces({"application/json"})
@Consumes("applcation/xml")
User findUserById(@PathParam("id") Integer id,@PathParam("name") String name);
@DELETE
@Path("/user/{id}")
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
void deleteUser(@PathParam("id") Integer id);
@GET
@Path("/findUserByArray")
@Consumes({"applcation/xml","applcation/json"})
@Produces({"application/json"})
User findUserByArray(@QueryParam("name") String name,@QueryParam("id") String id);
@POST
@Path("/upload")
@Consumes({MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_FORM_URLENCODED})
void fileUpLoad( @Multipart("file") Attachment image,@Multipart("id") String id,@Multipart("name") String name);
@GET
@Path("/Context")
@Consumes({MediaType.APPLICATION_XML})
void contextTest( @MatrixParam("mp") String[] mp,@CookieParam("cookie") Cookie cookie);
@POST
@Path("/testMultipart")
@Consumes({MediaType.MULTIPART_FORM_DATA})
void testMultipart( @Multipart(value="file") Attachment image);
@POST
@Path("/postAttribute")
@Consumes({MediaType.APPLICATION_FORM_URLENCODED})
@Produces({MediaType.APPLICATION_JSON})
User postAttribute(@FormParam("name")String name,@FormParam("id")String id);
@GET
@Path("/getById/{id}")
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
User getById(@PathParam("id") String id);
@GET
@Path("/getMap")
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
@XmlJavaTypeAdapter(MapAdapter.class)
Map<String, Object> getMap();
@GET
@Path("/getByHeader/{id}")
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
User getByHeader(@PathParam("id") Integer id, @HeaderParam("xcl") String xcl);
@POST
@Path("/getListByForm")
@Consumes({"application/xml","application/json",MediaType.APPLICATION_FORM_URLENCODED})
List<User> getListByForm( @FormParam("name")String name,@FormParam("id")String id);
@POST
@Path("/getListByBody")
@Consumes({"application/json"})
@Produces("application/json")
List<User> getListByBody(User user);
@POST
@Path("/getBodyByList")
@Consumes({"application/xml","application/json",MediaType.APPLICATION_FORM_URLENCODED})
@XmlJavaTypeAdapter(MapAdapter.class)
User getBodyByList(List<User> users);
}
接口实现
public class UserServiceImpl implements IUserService {
public User saveUser(User user) {
System.out.println("save user:" + user);
return user;
}
public void updateUser(User user) {
System.out.println("update user:" + user);
}
public List<User> findAllUsers(String[] status) {
for (String string : status) {
System.out.println(string);
}
List<User> users = new ArrayList<User>();
User user1 = new User();
user1.setId(1);
user1.setUsername("小强");
user1.setCity("北京");
List<Car> carList1 = new ArrayList<Car>();
Car car1 = new Car();
car1.setId(101);
car1.setCarName("保时捷");
car1.setPrice(1000000d);
carList1.add(car1);
Car car2 = new Car();
car2.setId(102);
car2.setCarName("宝马");
car2.setPrice(400000d);
carList1.add(car2);
user1.setCars(carList1);
users.add(user1);
return users;
}
public void deleteUser(Integer id) {
System.out.println("delete user id :" + id);
}
public User findUserById(Integer id,String name) {
if (id == 1) {
User user1 = new User();
user1.setId(1);
user1.setUsername("小明");
user1.setCity("北京");
String userString = JSON.toJSONString(user1);
return user1;
}
return null;
}
public void pet(String petId, String xcl ,User user) {
System.out.println(petId+","+xcl);
}
public User findUserByArray(String name,String id) {
User user = new User();
user.setId(Integer.parseInt(id));
user.setUsername(name);
return user;
}
public void fileUpLoad(Attachment image,String id,String name) {
ContentDisposition contentDisposition = image.getContentDisposition();
System.out.println(contentDisposition.toString());
MediaType type = image.getContentType();
MultivaluedMap<String, String> maps = image.getHeaders();
Set<String> keysSet = maps.keySet();
for (String string : keysSet) {
System.out.println(maps.get(string).toString());
}
Object object = image.getObject();
System.out.println(object);
System.out.println(id+","+type.toString());
/*try{
FileOutputStream outputStream = new FileOutputStream("d:/new.png");
DataHandler handler = image.getDataHandler();
InputStream in = handler.getInputStream();
byte[] bytes = new byte[1024];
int longer = 0;
while ((longer=in.read(bytes))!=-1) {
outputStream.write(bytes, 0, longer);
}
in.close();
outputStream.close();
System.out.println(handler.getName());
}catch(Exception e){
throw new RuntimeException(e);
}
*/
}
public void contextTest(String[] mp,Cookie cookie) {
for (String string : mp) {
System.out.println(string);
}
System.out.println(cookie.getValue());
}
public void testMultipart(Attachment image) {
try {
/*File file = (File) image.getObject();
System.out.println(file.getName());*/
System.out.println(image.getContentId());
DataHandler handler = image.getDataHandler();
String type = handler.getContentType();
String name = handler.getName();
System.out.println(type+","+name);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
public User postAttribute(String name, String id) {
System.out.println(name+","+id);
User user = new User();
user.setId(11);
user.setUsername("hah");
return user;
}
public User getById(String id) {
User user = new User();
if(id.equals("1")){
user.setUsername("xcl");
}
return user;
}
public Map<String, Object> getMap() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "xcl");
map.put("id", "11");
return map;
}
public User getByHeader(Integer id, String xcl) {
System.out.println(id+","+xcl);
return null;
}
public List<User> getListByForm(String name, String id) {
List<User> users = new ArrayList<User>();
User user1 = new User();
user1.setId(1);
user1.setUsername("小强");
user1.setCity("北京");
List<Car> carList1 = new ArrayList<Car>();
Car car1 = new Car();
car1.setId(101);
car1.setCarName("保时捷");
car1.setPrice(1000000d);
carList1.add(car1);
Car car2 = new Car();
car2.setId(102);
car2.setCarName("宝马");
car2.setPrice(400000d);
carList1.add(car2);
user1.setCars(carList1);
users.add(user1);
return users;
}
public List<User> getListByBody(User user) {
List<User> users = new ArrayList<User>();
User user1 = new User();
user1.setId(1);
user1.setUsername("小强");
user1.setCity("北京");
List<Car> carList1 = new ArrayList<Car>();
Car car1 = new Car();
car1.setId(101);
car1.setCarName("保时捷");
car1.setPrice(1000000d);
carList1.add(car1);
Car car2 = new Car();
car2.setId(102);
car2.setCarName("宝马");
car2.setPrice(400000d);
carList1.add(car2);
user1.setCars(carList1);
users.add(user1);
return users;
}
public User getBodyByList(List<User> users) {
User user = new User();
user.setId(11);
user.setUsername("xcl");
return user;
}
6.注解讲解
@Path("/userService"):路径
@Produces("*/*"):产生内容 @Produces({"application/json"}),@Produces({"application/xml"});
@Consumes({"application/xml","application/json"}):消费内容;MediaType.APPLICATION_FORM_URLENCODED{表单内容}
MediaType.MULTIPART_FORM_DATA{附件内容}
@PathParam("id")一般在形参中定义,是path路径携带的参数
@QueryParam("name")是路径参数形如key=value的形式
@XmlRootElement(name="User")实体类根元素
@POST:post请求方式
@PUT:put请求方式,一般用于存储{不常用}
@GET:get请求方式
@DELETE:delete请求方式,一般用于删除{不常用}
webservice之jax-rs实现方式的更多相关文章
- Axis2开发WebService客户端 的3种方式
Axis2开发WebService客户端 的3种方式 在dos命令下 wsdl2java -uri wsdl的地址(网络上或者本地) -p com.whir.ezoffi ...
- 转载 WebService 的CXF框架 WS方式Spring开发
WebService 的CXF框架 WS方式Spring开发 1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0 ...
- WebService的几种验证方式
转 http://www.cnblogs.com/yoshiki1895/archive/2009/06/03/1495440.html WebService的几种验证方式 1.1 WebS ...
- 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...
- java 实现WebService 以及不同的调用方式
webservice: 就是应用程序之间跨语言的调用 wwww.webxml.com.cn 1.xml 2. wsdl: webservice description l ...
- webService调用的N种方式
一.服务器端代码 新建一个web Service Project工程(貌似普通的java工程也可以,这里不太明白各种webService的框架有什么区别),建立如下的类: package com.bo ...
- webservice访问的几种方式
今天在对接的客户用到了webservice,最终采用wsimport生成本地代理方式以SDK的形式对接,但是想的完整的总结一下ws的几种调用方式. 发布服务的IP地址是:192.168.125.116 ...
- WebService与RMI(远程调用方式实现系统间通信)
前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架 ...
- WebService客户端几种实现方式
1.jdk原生调用(需要获取服务接口文件) import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.Ser ...
- Android使用webService(发送xml数据的方式,不使用jar包)
Android使用webService可以用ksoap2.jar包来使用.但是我觉得代码不好理解,而且记不住. 所以我查询了好多资料,以及自己的理解.可以用代码发送http请求(发送xml数据)来访问 ...
随机推荐
- html+jquery实现简单图片裁剪
有了上一篇图片放大镜的铺垫,今天的这个例子是缩小镜,因为裁剪的原图往往很大,不能在工作区域看到全部图片,所以,要有缩小镜来显示,当前裁剪的区域是原图的个部分.按照惯例首先看下效果图: 功能一:载入默认 ...
- Gravatar 头像使用
Gravatar :如果在Gravatar的服务器上放置了你自己的头像,那么在任何支持Gravatar的blog或者留言本上留言时,只要提供你与这个头像关联的email地址,就能够显示出你的Grava ...
- mathematics of deep learning (paper reading)
1.数学上,不变性 2.信息论上
- leetcode 222.Count Complete Tree Nodes
完全二叉树是从左边开始一点点填充节点的,因此需要计算所有的节点的个数. 则分别从左边和右边来进行传递的,当左右是完全二叉树的时候,其节点个数就是pow(2,h)-1. /** * Definition ...
- c语言实验报告
实验项目:分支结构实验 姓名:熊承启 4.3.1if语句的应用 问题描述: 读入三个分别表示箱子长宽高的整数值,判断并输出该箱子是长方体还是正方体. 程序框图: 程序实现: #include< ...
- Calling Circles(UVa 247)(Floyd 算法)
用Floyd算法求出传递闭包,然后用dfs求出每条连通分量.注意其中用到的几个小技巧: #include<cstdio> #include<iostream> #include ...
- 浅谈兔兔对Object.defineProperty的理解
给一个对象定义一个新的属性或者在修改一个对象现有的属性,并返回这个对象 语法: Object.defineProperty(参数1,参数2,参数3) 参数1:目标对象 参数2:要修改或者添加的属性名称 ...
- 多线程与CPU和多线程与GIL
多线程与CPU:1.单核CPU CPU密集型的程序(做计算操作的程序) 单线程即可( 此时的任务已经把CPU资源100%消耗了,就没必要也不可能使用多线程来提高计算效率)2.单核CPU IO密集 ...
- python leetcode 颠倒二进制数
我的做法,,这个题在于必须补0 def reverseBits(n): num=32-len(bin(n)[2:]) m = bin(n)[2:][::-1] if num > 0: for i ...
- 修复因为存储空间问题引起的nexus 服务启动异常
故障描述 因为nexus所在服务器存储空间满了, 做了部分清理操作,结果nexus 启动异常,提示错误信息基本类似如下: build 285537d2767275f460df32c6a3be01b ...