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实现方式的更多相关文章

  1. Axis2开发WebService客户端 的3种方式

    Axis2开发WebService客户端 的3种方式 在dos命令下   wsdl2java        -uri    wsdl的地址(网络上或者本地)   -p  com.whir.ezoffi ...

  2. 转载 WebService 的CXF框架 WS方式Spring开发

    WebService 的CXF框架 WS方式Spring开发   1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0 ...

  3. WebService的几种验证方式

    转 http://www.cnblogs.com/yoshiki1895/archive/2009/06/03/1495440.html WebService的几种验证方式 1.1      WebS ...

  4. 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】

    不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...

  5. java 实现WebService 以及不同的调用方式

    webservice:    就是应用程序之间跨语言的调用    wwww.webxml.com.cn    1.xml    2.    wsdl: webservice description l ...

  6. webService调用的N种方式

    一.服务器端代码 新建一个web Service Project工程(貌似普通的java工程也可以,这里不太明白各种webService的框架有什么区别),建立如下的类: package com.bo ...

  7. webservice访问的几种方式

    今天在对接的客户用到了webservice,最终采用wsimport生成本地代理方式以SDK的形式对接,但是想的完整的总结一下ws的几种调用方式. 发布服务的IP地址是:192.168.125.116 ...

  8. WebService与RMI(远程调用方式实现系统间通信)

    前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架 ...

  9. WebService客户端几种实现方式

    1.jdk原生调用(需要获取服务接口文件) import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.Ser ...

  10. Android使用webService(发送xml数据的方式,不使用jar包)

    Android使用webService可以用ksoap2.jar包来使用.但是我觉得代码不好理解,而且记不住. 所以我查询了好多资料,以及自己的理解.可以用代码发送http请求(发送xml数据)来访问 ...

随机推荐

  1. php 调用接口

    1.一般常用方法 file_get_contents(): 今天调用了一个反人类的接口,接口是get方式传输,里面有一个参数是当前时间,没错,不是时间戳,是当前格式化的时间:2017-8-9 11:1 ...

  2. 2019微软Power BI 每月功能更新系列——Power BI 4月版本功能完整解读

    Power BI4月份的更新对整个产品进行了重大更新.此版本增加了基于DAX表达式定义视觉效果标题和按钮URL的功能.本月Power BI也新增了许多新的连接器,现在可以使用几种预览连接器,包括Pow ...

  3. .Net memory management Learning Notes

    Managed Heaps In general it can be categorized into 1) SOH and 2) LOH.  size lower than 85K will be ...

  4. redux源码图解:createStore 和 applyMiddleware

    在研究 redux-saga时,发现自己对 redux middleware 不是太了解,因此,便决定先深入解读一下 redux 源码.跟大多数人一样,发现 redux源码 真的很精简,目录结构如下: ...

  5. asp.net开启多线程异步处理

    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { try { Thread categoryThrea ...

  6. ubuntu16.04如何安装floodlight并且连接eclipse

    按顺序走,亲测没出错.用的是Luna R版本的eclipse https://floodlight.atlassian.net/wiki/spaces/floodlightcontroller/pag ...

  7. ubuntu18.04 配置chrome ss

    为了FQ 不FQ不行啊 安装shaowsocks 1. 用实验室的服务器 sslocal -c xxx.json 2. 下载SwitchyOmega插件 链接: https://pan.baidu.c ...

  8. JavaScript DOM&BOM

    1.DOM含义 D: Document 文档 一份文档就是一棵节点树,每个节点都是一个对象O:Object 对象 JavaScript语言里对象可以分为三种类型: (1)用户定义的对象(user-de ...

  9. shell生成随机字符串

    #!/bin/bash i=1while [ $i -le 10000 ]doa=`echo `< /dev/urandom tr -dc A-Za-z0-9 | head -c6``echo  ...

  10. py-day4 python filter函数

    filter函数:遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下 # 例子:条件筛选 name =['m_xiaoli','zhangfei','m_xiaoma','m_wang ...