CXF发布REST服务

1.什么是REST服务

  定义:REST就是一种编程风格,它可以精确定位网上资源(服务接口、方法、参数)

  REST支持数据格式:XML、JSON

  REST支持发送方式:GET,POST

2.REST服务和SOAP服务的比较

因为SOAP并不假定传输数据的下层协议,因此必须设计为能在各种协议上运行。即使绝大多数SOAP是运行在HTTP上,使用URI标识服务,SOAP也仅仅使用POST方法发送请求,用一个唯一的URI标识服务的入口。举一个图书馆在线查询管理系统为例,服务提供者必须为每一本书提供一个内部标识,然后可能定义一个listBooks操作来返回一系列图书,一个getBook操作来返回指定的图书,一个createBook操作来向数据库加入新增的图书,一个deleteBook操作来删除作废的图书,每个操作都有各自的参数,尤其是用内部标识来标识操作的图书。这种设计被诟病之处,在于deleteBook操作也要用POST方法来发送,而其实HTTP协议有更和逻辑的DELETE方法可用。REST正是这样设计的,REST为每一个资源(此处是图书)指定一个唯一的URI,而用HTTP的4种方法GET、POST、PUT、DELETE直观地表示获取、创建、更新和删除图书。同时图书集合也是和单本的图书不同的资源,如果用/books来代表图书列表,/books/ID来代表标识为ID的图书,那么对/books的GET操作就代表返回整个图书列表,对/books/ID的DELETE操作代表删除指定的图书,等等。

3.一个简单的实例

  3.1 需求

   发布一个服务可以用于查询一个学生和多个学生

  3.2 实现

   3.2.1 服务端开发

   步骤

  1.导入jar包

  2.创建学生的pojo类,这里设置两个字段

package com.liaobei.pojo;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Student {
  private int id;
  private String name;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
  
}
View Code

 

 注意:在pojo类中加入@XmlRootElement 注释,否则会报错

          该注释的作用是把java对象转换为xml格式

 3.创建SEI接口

import java.util.List;

import javax.jws.WebService;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.liaobei.pojo.Student;
@WebService
@Path("/student")
public interface StudentInterface {
    
    @GET//指定请求方式,如果服务端发布的时候指定的是GET(POST),那么客户端访问时必须使用GET(POST)
    @Produces(MediaType.APPLICATION_XML)//指定服务数据类型
    @Path("/query/{name}")//@Path("/query/{id}")就是将“/query”映射到方法上,“{id}”映射到参数上,多个参数,以“/”隔开,放到“{}”中
    public Student queryStudent(@PathParam("name")String name);
    
    
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("/queryList/{name}")
    public List<Student> querySomeStudent(@PathParam("name")String name);
}
View Code

 4.创建SEI的实现类

import java.util.ArrayList;
import java.util.List;

import com.liaobei.pojo.Student;

public class StudentInterfaceImpl implements StudentInterface {

     
    public Student queryStudent(String name) {
        Student s= new Student();
        s.setId(1);
        s.setName("1");
        return s;
    }

     
    public List<Student> querySomeStudent(String name) {
        Student s= new Student();
        s.setId(1);
        s.setName("1");
        
        Student s1= new Student();
        s1.setId(2);
        s1.setName("2");
        
        List<Student> li = new ArrayList<Student>();
        li.add(s);
        li.add(s1);
        return li;
    }

}
View Code

5.发布服务

import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;

public class StudentServer {
 public static void main(String[] args) {
     
     JAXRSServerFactoryBean bean  = new JAXRSServerFactoryBean();
     
     bean.setServiceBean(new StudentInterfaceImpl());
     bean.setAddress("http://127.0.0.1:12345/user");
     bean.setResourceClasses(StudentInterfaceImpl.class);
     bean.create();
}
}
View Code

6.测试服务

输入http://127.0.0.1:12345/user/student/query/1 后若结果如下所示则发布成功

 

转载于:https://www.cnblogs.com/liaobei/p/6354408.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。而Apache CXF是一个开源的、全功能的Web服务框架,可用于构建和部署SOAP和RESTful Web服务。 在Spring Boot中整合CXF REST服务的步骤如下: 1. 添加CXF和Spring Boot的相关依赖。在pom.xml文件中添加以下依赖: ```xml <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxrs</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.0</version> </dependency> </dependencies> ``` 2. 创建一个RESTful Web服务接口。在Spring Boot项目中创建一个标注有`@Path`注解的接口,定义RESTful风格的服务接口。 ```java @Path("/users") public interface UserService { @GET @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) User getUser(@PathParam("id") String id); @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) User createUser(User user); // ... } ``` 3. 实现RESTful接口。创建一个实现了上述接口的类,并添加`@Service`注解,将其作为Spring的Bean进行管理。 ```java @Service public class UserServiceImpl implements UserService { @Override public User getUser(String id) { // 实现具体的逻辑 } @Override public User createUser(User user) { // 实现具体的逻辑 } // ... } ``` 4. 配置CXF。在application.properties(或application.yml)文件中添加以下配置: ```properties cxf.path=/api cxf.jaxrs.classes-scan=true ``` 这将配置CXF的访问路径和自动扫描RESTful服务接口的功能。 5. 启动Spring Boot应用程序。可以通过`@SpringBootApplication`注解标注主类,并添加`@Endpoint`注解来启动应用程序和发布Web服务。 至此,我们已经成功地将CXF REST服务整合到Spring Boot应用程序中。可以通过访问`http://localhost:8080/api/users/1`来调用RESTful接口的`getUser`方法,并得到返回结果。 总的来说,整合Spring Boot和CXF REST服务相对简单,只需添加相关依赖、定义接口和实现类,然后配置CXF即可。这种整合方式可以使开发者更加便捷地构建和部署RESTful Web服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值