博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CXF-JAX-RS开发(一)入门案例
阅读量:4978 次
发布时间:2019-06-12

本文共 8694 字,大约阅读时间需要 28 分钟。

一、简介

  资源驱动。基于HTTP协议[按照标准指定URL,就可以访问数据]XML|JSON格式传输数据。

二、quickstart

  1、创建maven project[Packaging:jar]

    

 

    

  2、导入依赖

1 
2
3
org.apache.cxf
4
cxf-rt-frontend-jaxrs
5
3.0.1
6
7
8
9
org.apache.cxf
10
cxf-rt-transports-http-jetty
11
3.0.1
12
13
14
15
org.slf4j
16
slf4j-log4j12
17
1.7.12
18

  3、搭建服务端

    3.1、导入实体bean

      

      

    3.2、构建服务bean

      3.2.1、IUserService.java     

1 package org.cxf_rs.service; 2  3 import java.util.List; 4 import org.cxf_rs.domain.User; 5  6 public interface IUserService { 7     //增 8     public void saveUser(User user); 9     //删10     public void deleteUser(Integer id);11     //改12     public void updateUser(User user);13     //查-查询所有14     public List
findAllUsers();15 //查-根据id查询16 public User finUserById(Integer id);17 }

      3.2.2、UserServiceImpl.java

1 package org.cxf_rs.service; 2  3 import java.util.ArrayList; 4 import java.util.List; 5  6 import org.cxf_rs.domain.Car; 7 import org.cxf_rs.domain.User; 8  9 10 public class UserServiceImpl implements IUserService {11     //增12     public void saveUser(User user) {13         System.out.println("save user:" + user);14     }15     //删16     public void deleteUser(Integer id) {17         System.out.println("delete user id :" + id);18     }19     //改20     public void updateUser(User user) {21         System.out.println("update user:" + user);22     }23     //查-查询所有24     public List
findAllUsers() {25 List
users = new ArrayList
();26 User user1 = new User();27 user1.setId(1);28 user1.setUsername("小明");29 user1.setCity("北京");30 31 List
carList1 = new ArrayList
();32 Car car1 = new Car();33 car1.setId(101);34 car1.setCarName("保时捷");35 car1.setPrice(1000000d);36 carList1.add(car1);37 Car car2 = new Car();38 car2.setId(102);39 car2.setCarName("宝马");40 car2.setPrice(400000d);41 carList1.add(car2);42 user1.setCars(carList1);43 44 users.add(user1);45 46 User user2 = new User();47 user2.setId(2);48 user2.setUsername("小丽");49 user2.setCity("上海");50 users.add(user2);51 52 return users;53 }54 //查-根据id查询55 public User finUserById(Integer id) {56 if (id == 1) {57 User user1 = new User();58 user1.setId(1);59 user1.setUsername("小明");60 user1.setCity("北京");61 return user1;62 }63 return null;64 }65 }

    3.3、添加注解

      3.3.1、domain[@XmlRootElement注解]

        

        

      未加的话报如下错误:

        

      3.3.2、service

        ①常用注解

  

        ②IUserService.java带注解 

1 package org.cxf_rs.service; 2  3 import java.util.List; 4  5 import javax.ws.rs.Consumes; 6 import javax.ws.rs.DELETE; 7 import javax.ws.rs.GET; 8 import javax.ws.rs.POST; 9 import javax.ws.rs.PUT;10 import javax.ws.rs.Path;11 import javax.ws.rs.PathParam;12 import javax.ws.rs.Produces;13 14 import org.cxf_rs.domain.User;15 16 17 @Path("/userService")18 @Produces("*/*")19 public interface IUserService {20     //增21     @POST22     @Path("/user")23     @Consumes({ "application/xml", "application/json" })24     public void saveUser(User user);25     //删26     @DELETE27     @Path("/user/{id}")28     @Consumes("application/xml")29     public void deleteUser(@PathParam("id") Integer id);30     //改31     @PUT32     @Path("/user")33     @Consumes({ "application/xml", "application/json" })34     public void updateUser(User user);35     //查-查询所有36     @GET37     @Path("/user")38     @Produces({ "application/xml", "application/json" })39     public List
findAllUsers();40 //查-根据id查询41 @GET42 @Path("/user/{id}")43 @Consumes("application/xml")44 @Produces({ "application/xml", "application/json" })45 public User finUserById(@PathParam("id") Integer id);46 }

  4、发布服务

1 package org.cxf_rs.server; 2  3 import org.apache.cxf.interceptor.LoggingInInterceptor; 4 import org.apache.cxf.interceptor.LoggingOutInterceptor; 5 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; 6 import org.cxf_rs.domain.Car; 7 import org.cxf_rs.domain.User; 8 import org.cxf_rs.service.IUserService; 9 import org.cxf_rs.service.UserServiceImpl;10 11 12 public class JAX_RS_Server {13     public static void main(String[] args) {14         // 创建业务接口实现类对象15         IUserService userService = new UserServiceImpl();16         // 服务器FactoryBean创建服务17         JAXRSServerFactoryBean restServer = new JAXRSServerFactoryBean();18         restServer.setResourceClasses(User.class, Car.class);19         restServer.setServiceBean(userService);20         restServer.setAddress("http://localhost:9999/");21         // 打印日志22         restServer.getInInterceptors().add(new LoggingInInterceptor());23         restServer.getOutInterceptors().add(new LoggingOutInterceptor());24         // 发布服务25         restServer.create();26         System.out.println("服务器启动成功!");27     }28 }

  5、客户端测试

    5.1、浏览器测试

      5.1.1、查询所有

        查询所有:

          

      5.1.2、根据id查询

        根据id查询:

        

    5.2、WebClient 工具类[CXF 自带的工具包]

      5.2.1、导入依赖

1 
2
3
org.apache.cxf
4
cxf-rt-rs-client
5
3.0.1
6

      5.2.2、目录结构

        

      5.2.3、JAX_RS_Client.java

        ① 测试新增   

1 // 测试新增 2 @Test 3 public void test_save(){ 4     /** 5      * create :建立与调用服务资源路径连接  6      * path :访问服务器的路径--->@Path  7      * type :发送给服务器数据格式--->@Consumes  8      * accept :接收服务器传输数据格式--->@Produces 9      */10     User user = new User();11     user.setId(3);12     user.setUsername("小美");13     user.setCity("深圳");14     WebClient.create("http://localhost:9999/").path("userService/user").type(MediaType.APPLICATION_JSON).post(user);15 }

        

        ②测试删除  

1 // 测试删除 2 @Test 3 public void test_delete(){ 4     /** 5        * create :建立与调用服务资源路径连接  6        * path :访问服务器的路径--->@Path  7        * type :发送给服务器数据格式--->@Consumes  8        * accept :接收服务器传输数据格式--->@Produces 9        */10     // 删除11     WebClient.create("http://localhost:9999/").path("userService/user/1").type(MediaType.APPLICATION_XML).delete();12 }

      

        ③测试修改   

1 // 测试修改 2 @Test 3 public void test_update(){ 4     /** 5        * create :建立与调用服务资源路径连接  6        * path :访问服务器的路径--->@Path  7        * type :发送给服务器数据格式--->@Consumes  8        * accept :接收服务器传输数据格式--->@Produces 9        */10     User user = new User();11     user.setId(3);12     user.setUsername("小美");13     user.setCity("深圳");14     // 修改15     WebClient.create("http://localhost:9999/").path("userService/user").type(MediaType.APPLICATION_JSON).put(user);16 }

      

        ④测试查询所有

1 // 测试查询所有 2 @Test 3 public void test_findAll() { 4     /** 5        * create :建立与调用服务资源路径连接  6        * path :访问服务器的路径--->@Path  7        * type :发送给服务器数据格式--->@Consumes 8        * accept :接收服务器传输数据格式--->@Produces 9        */10     // 查询所有用户11     Collection
users = WebClient.create("http://localhost:9999/userService/user").accept(MediaType.APPLICATION_XML).getCollection(User.class);12 System.out.println("查询所有用户" + users);13 }

      

        ⑤测试根据id查询

1 // 测试根据id查询 2 @Test 3 public void test_findById() { 4     /** 5        * create :建立与调用服务资源路径连接  6        * path :访问服务器的路径--->@Path  7        * type :发送给服务器数据格式--->@Consumes 8        * accept :接收服务器传输数据格式--->@Produces 9        */10     WebClient client = WebClient.create("http://localhost:9999/");11         User responseUser = client.path("userService/user/1").accept(MediaType.APPLICATION_XML).get(User.class);12     System.out.println("根据id查询" + responseUser);13 }

      

      5.2.4、测试新增报异常

        ①异常描述

          Caused by: javax.ws.rs.ProcessingException: No message body writer has been found for class cn.itcast.cxf.domain.User, ContentType: application/json 

        ②出现原因

          测试时传输JSON格式的数据

        ③解决方案

         引入json转换器的依赖

1 
2
3
org.apache.cxf
4
cxf-rt-rs-extension-providers
5
3.0.1
6
7
8
9
org.codehaus.jettison
10
jettison
11
1.3.7
12

转载于:https://www.cnblogs.com/EzraOholiabXue/p/8066157.html

你可能感兴趣的文章
Android 解决NestedScrollView 嵌套 RecyclerView出现的卡顿,上拉刷新无效
查看>>
Android之SharedPreferences两个工具类
查看>>
基础数论
查看>>
ios 调用webservice整理
查看>>
Spring集成log4j日志管理
查看>>
jenkins学习:jenkins的基本配置
查看>>
python学习笔记:python异常的调用原理
查看>>
用来生成get set string 方法
查看>>
iOS开发日记17-runtime基础篇
查看>>
第6次课程作业--郑懿
查看>>
net的Session配置
查看>>
winform下读取excel文件并绑定datagridview例子
查看>>
常用协议 —— webservice://
查看>>
格式化Json传递的日期
查看>>
写一个js表单验证框架
查看>>
工厂模式
查看>>
修改html页面内css引入路径
查看>>
[LeetCode]#8 String to Integer (atoi)
查看>>
Clappr——开源的Web视频播放器
查看>>
vbs实现zip压缩
查看>>