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数据)来访问 ...
随机推荐
- DatePickerAndroid用法
一.代码/** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; import ...
- 2015219付颖卓《网络对抗》EXP8 Web基础
实验后回答问题 1.什么是表单 来自百度百科的官方定义:表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方 ...
- 简述grub启动引导程序配置及命令行接口详解
一.版本 grub:Grand Unified Bootloader grub 0.x:grub legacy grub 1.x:grub2 二.grub legacy 三个过程 stage1:安装在 ...
- 科学计算和可视化(numpy及matplotlib学习笔记)
网上学习资料:https://2d.hep.com.cn/1865445/9 numpy库内容: 函数 描述 np.array([x,y,z],dtype=int) 从Python列表和元组创造数组 ...
- hibernate的lazy初始化结果
package com.ehcache; import java.io.Serializable; public class User implements Serializable{ private ...
- 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?
https://blog.csdn.net/Iperishing/article/details/86674084
- 导出excel,并将数据返回给前端(包含权限判断)
一.先写导出按钮接口 1.此接口对用户权限进行判断 2.此接口将前端的参数组合拼凑到下一个接口的url中去,用于条件筛选 3.用户有权限的情况下将用户的权限信息保存到redis中去,并将token写到 ...
- Java泛型相关总结(上)
最近在看<Java核心技术>泛型相关的部分,总结下. 泛型程序设计是什么? 泛型编程(generic programming)是计算机编程中的一种风格,类型通过参数指定.意味着编写的代码可 ...
- update_engine-整体结构(二)
在update_engine-整体结构(一)中分析UpdateEngineDaemon::OnInit()的整体情况.下面先分析在该方法中涉及的DaemonStateAndroid和BinderUpd ...
- 使用LAP数据集进行年龄训练及估计
一.背景 原本是打算按<DEX Deep EXpectation of apparent age from a single image>进行表面年龄的训练,可由于IMDB-WIKI的数据 ...