基于JAX-RS规范入门 服务端
服务提供方RS xml或者json
2.5.1 编写服务端
第一步:创建maven的web工程,导入一下依赖
<dependencies>
<!-- 导入webservice依赖 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.0.1</version>
</dependency>
<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>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.1</version>
<exclusions>
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_3.0_spec</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.colobu</groupId>
<artifactId>fastjson-jaxrs-json-provider</artifactId>
<version>0.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_3.0_spec</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>1234</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
第二步:在web.xml中配置spring容器在应用加载时创建
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
第三步:在web.xml中配置CXF的核心控制器
<!-- 配置CXF的核心控制器,就是一个Servlet:CXFServlet -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<!-- 此处不要配置/*,因为CXFServlet只能处理webservice请求 /ws/*表明请求URL中有/ws的请求 -->
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
第四步:业务代码
实体类代码
package cn.itcast.pojo;
/*<user>
<id>11</id>
<name>zhangsan</name>
</user>*/
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
@XmlRootElement(name="user") //规定了xml中root节点的名称,此注解不能缺少
public class User implements Serializable {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
接口代码
package cn.itcast.service;
import cn.itcast.pojo.User;
import javax.ws.rs.*;
@Path("/user") //@Path 相当于@RequestMapping
public interface UserService {
@POST
@Path("/")
@Consumes() //消费者请求时的参数数据格式
public void save(User user);
@PUT
@Path("/")
@Consumes(value ={"application/json","application/xml"})
public void update(User user);
@GET
@Path("/{id}")
@Consumes(value ={"application/json","application/xml"})
@Produces(value ={"application/xml","application/json"}) //提供者返回时的内容数据格式
public User findById(@PathParam("id") Integer id); //@PathParam从路径中获取参数。此注解不能少
@DELETE
@Path("/{id}")
@Consumes(value ={"application/json","application/xml"})
public void deleteById(@PathParam("id")Integer id);
}
实现类代码
package cn.itcast.service.impl;
import cn.itcast.pojo.User;
import cn.itcast.service.UserService;
public class UserServiceImpl implements UserService {
@Override
public void save(User user) {
System.out.println("进入了save方法"+user.getName());
}
@Override
public void update(User user) {
System.out.println("进入了update方法"+user.getName());
}
@Override
public User findById(Integer id) {
User user = new User();
user.setId(id);
user.setName("zhangsan");
return user;
}
@Override
public void deleteById(Integer id) {
System.out.println("进入了deleteById方法:id是"+id);
}
}
第四步:启动项目
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗