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. ArcGIS中的坐标系:基本概念和常用操作(一)

    本文呢是主要是借鉴李郎平李大大的博士论文和百度百科,里面还有一点点我自己的理解,希望能帮助自己加深对于坐标系的认识. 李大大的博客:http://blog.sciencenet.cn/u/Brume ...

  2. UML第一次作业:UML用例图绘制

      UML用例图绘制 一.plantuml用例图语法小结 1.用例 用法:用例用圆括号(),或者使用关键字来定义用例 示例1: @startuml (First UML) (Another UML)a ...

  3. STL——string

    C++之string类型详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个泛型类出现,他集成的操作函 ...

  4. es6中的双箭头函数

    原代码: const fetchPosts = subreddit => dispatch => { dispatch(requestPosts(subreddit)); return c ...

  5. poi 工具类

    <!--POI--> <dependency> <groupId>org.apache.poi</groupId> <artifactId> ...

  6. vue cli3.0配制axios代理

    今天学习时,想访问网易新闻接口,结果显而易见,因为跨域被浏览器拒绝了. 去网上找一下结果一开始找到的是2.x版本的配置,生硬的放进去,给我各种报错.编译阶段就炸了.浪费好多时间 再按3.0版本去搜索才 ...

  7. 用雷达统计成绩单、numpy、matplotlib的使用

    #e19.1DrawRadar import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.rcPa ...

  8. 疯狂java讲义 第八章课后题

    1.创建一个Set集合,并用Set集合保存用户通过控制台输入的字符串. import java.util.HashSet; import java.util.Scanner; public class ...

  9. 引擎设计跟踪 ShadowMap 细节和分析

    之前在工作总汇总了shadowmap的各种问题 [工作积累] shadow map问题汇总 最近有点时间再仔细研究了shadowmap的一些算法.主要修复了LiSPSM(上面链接里后面有更新),实现了 ...

  10. ecs

    第一章弹性计算服务ecs概述 1.什么是弹性计算服务ecs 2弹性计算服务ecs的特点 3.弹性计算服务ecs的应用场景 slb------ecs----ecs----------- rds      ...