分享

CXF系列(六):CXF实现REST接口开发...

 昵称10087950 2022-09-01 发布于江苏

这一篇来实现REST开发接口,具体的概念以及和SOAP的区别参考上一篇文章。

1:pom.xml

<project xmlns="http://maven./POM/4.0.0" xmlns:xsi="http://www./2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven./POM/4.0.0 http://maven./xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.qqw</groupId>
  <artifactId>CXF_Spring_restful</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>CXF_Spring_restful</name>
  <url>http://maven.</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <!-- 添加Spring支持 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-core</artifactId>
	    <version>4.1.7.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>4.1.7.RELEASE</version>
	</dependency>
	<dependency>
	     <groupId>org.springframework</groupId>
	     <artifactId>spring-tx</artifactId>
	     <version>4.1.7.RELEASE</version>
	    </dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>4.1.7.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context-support</artifactId>
	    <version>4.1.7.RELEASE</version>
	</dependency>
	 
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-web</artifactId>
	    <version>4.1.7.RELEASE</version>
	</dependency>
	 
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	    <version>4.1.7.RELEASE</version>
	</dependency>
	 
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aop</artifactId>
	    <version>4.1.7.RELEASE</version>
	</dependency>
	 
	 
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aspects</artifactId>
	    <version>4.1.7.RELEASE</version>
	</dependency>
	 
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-jdbc</artifactId>
	    <version>4.1.7.RELEASE</version>
	</dependency>
    
    
    <!-- 添加cxf支持  -->
	 
	<dependency>
	    <groupId>org.apache.cxf</groupId>
	    <artifactId>cxf-rt-transports-http</artifactId>
	    <version>3.1.5</version>
	</dependency>
        //项目里面所有的注解在这个api包下面
	<dependency>
	    <groupId>javax.ws.rs</groupId>
	    <artifactId>javax.ws.rs-api</artifactId>
	    <version>2.0.1</version>
	</dependency>
	//这是json处理的包,目前这知道这个,GSON和fastjson没尝试
	<dependency>
	    <groupId>org.codehaus.jackson</groupId>
	    <artifactId>jackson-jaxrs</artifactId>
	    <version>1.9.13</version>
	</dependency>
	
	<dependency>
	    <groupId>org.apache.cxf</groupId>
	    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
	    <version>3.1.4</version>
	</dependency>
	
    <!--实现日志  -->
    <dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-log4j12</artifactId>
	    <version>1.7.22</version>
    </dependency>
    
    
  </dependencies>
</project>

2:web.xml这个和之前一样,没什么变化

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns="http://java./xml/ns/javaee" xmlns:web="http://java./xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java./xml/ns/javaee http://java./xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  3. <display-name>CXF_Spring_restful</display-name>
  4. <welcome-file-list>
  5. <welcome-file>index.html</welcome-file>
  6. <welcome-file>index.htm</welcome-file>
  7. <welcome-file>index.jsp</welcome-file>
  8. <welcome-file>default.html</welcome-file>
  9. <welcome-file>default.htm</welcome-file>
  10. <welcome-file>default.jsp</welcome-file>
  11. </welcome-file-list>
  12. <context-param>
  13. <param-name>webAppRootKey</param-name>
  14. <param-value>CXF_Spring_restful.root</param-value>
  15. </context-param>
  16. <!-- 处理编码格式 -->
  17. <filter>
  18. <filter-name>characterEncodingFilter</filter-name>
  19. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  20. <init-param>
  21. <param-name>encoding</param-name>
  22. <param-value>UTF-8</param-value>
  23. </init-param>
  24. <init-param>
  25. <param-name>forceEncoding</param-name>
  26. <param-value>true</param-value>
  27. </init-param>
  28. </filter>
  29. <filter-mapping>
  30. <filter-name>characterEncodingFilter</filter-name>
  31. <url-pattern>/*</url-pattern>
  32. </filter-mapping>
  33. <!-- Log4J Start -->
  34. <context-param>
  35. <param-name>log4jConfigLocation</param-name>
  36. <param-value>classpath:log4j.properties</param-value>
  37. </context-param>
  38. <context-param>
  39. <param-name>log4jRefreshInterval</param-name>
  40. <param-value>6000</param-value>
  41. </context-param>
  42. <!-- Spring Log4J config -->
  43. <listener>
  44. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  45. </listener>
  46. <!-- Spring配置文件 -->
  47. <context-param>
  48. <param-name>contextConfigLocation</param-name>
  49. <param-value>classpath:applicationContext.xml</param-value>
  50. </context-param>
  51. <listener>
  52. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  53. </listener>
  54. <servlet>
  55. <servlet-name>CXFServlet</servlet-name>
  56. <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  57. </servlet>
  58. <servlet-mapping>
  59. <servlet-name>CXFServlet</servlet-name>
  60. <url-pattern>/webservice/*</url-pattern>
  61. </servlet-mapping>
  62. </web-app>

3:applicationContext.xml和之前的不一样

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www./schema/beans"
  3. xmlns:xsi="http://www./2001/XMLSchema-instance"
  4. xmlns:p="http://www./schema/p"
  5. xmlns:aop="http://www./schema/aop"
  6. xmlns:context="http://www./schema/context"
  7. xmlns:jee="http://www./schema/jee"
  8. xmlns:tx="http://www./schema/tx"
  9. xmlns:jaxrs="http://cxf./jaxrs"
  10. xsi:schemaLocation="
  11. http://www./schema/aop http://www./schema/aop/spring-aop-4.0.xsd
  12. http://www./schema/beans http://www./schema/beans/spring-beans-4.0.xsd
  13. http://www./schema/context http://www./schema/context/spring-context-4.0.xsd
  14. http://www./schema/jee http://www./schema/jee/spring-jee-4.0.xsd
  15. http://www./schema/tx http://www./schema/tx/spring-tx-4.0.xsd
  16. http://cxf./jaxrs http://cxf./schemas/jaxrs.xsd">
  17. <!-- 自动扫描 -->
  18. <context:component-scan base-package="com.qqw" />
  19. <!-- 定义服务提供者 -->
  20. <jaxrs:server id="webService" address="/">
  21. <!--输入拦截器设置-->
  22. <jaxrs:inInterceptors>
  23. <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
  24. </jaxrs:inInterceptors>
  25. <!--输出拦截器设置-->
  26. <jaxrs:outInterceptors>
  27. <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
  28. </jaxrs:outInterceptors>
  29. <!--serviceBeans:暴露的WebService服务类-->
  30. <jaxrs:serviceBeans>
  31. <ref bean="studentService"/>
  32. </jaxrs:serviceBeans>
  33. <!--支持的协议-->
  34. <jaxrs:extensionMappings>
  35. <entry key="json" value="application/json"/>
  36. <entry key="xml" value="application/xml"/>
  37. </jaxrs:extensionMappings>
  38. <!--编码格式-->
  39. <jaxrs:languageMappings>
  40. </jaxrs:languageMappings>
  41. <!--对象转换-->
  42. <jaxrs:providers>
  43. <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>
  44. </jaxrs:providers>
  45. </jaxrs:server>
  46. </beans>

4:一个实体类
  1. package com.qqw.entity;
  2. public class Student {
  3. private String name;
  4. private String sex;
  5. private Integer age;
  6. public Student() {
  7. super();
  8. // TODO Auto-generated constructor stub
  9. }
  10. public Student(String name, String sex, Integer age) {
  11. super();
  12. this.name = name;
  13. this.sex = sex;
  14. this.age = age;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public String getSex() {
  23. return sex;
  24. }
  25. public void setSex(String sex) {
  26. this.sex = sex;
  27. }
  28. public Integer getAge() {
  29. return age;
  30. }
  31. public void setAge(Integer age) {
  32. this.age = age;
  33. }
  34. }

5:在写接口前一些注解的概念参考这篇文章: JAX-RS规范-常用注解浅析

接口StudentService.java

  1. package com.qqw.webservice;
  2. import java.util.List;
  3. import javax.ws.rs.GET;
  4. import javax.ws.rs.Path;
  5. import javax.ws.rs.PathParam;
  6. import javax.ws.rs.Produces;
  7. import javax.ws.rs.core.MediaType;
  8. import com.qqw.entity.Student;
  9. @Path("/studentService")
  10. @Produces(MediaType.APPLICATION_JSON)
  11. public interface StudentService {
  12. //参看是否有这个学生
  13. @GET
  14. @Path("/status/{name}/{age}")
  15. public String getStatus(@PathParam("name") String name,@PathParam("age") Integer age);
  16. //通过id查看学生信息
  17. @GET
  18. @Path("/student/{index}")
  19. public Student getStudentById(@PathParam("index") Integer id);
  20. //查看所有学生信息
  21. @GET
  22. @Path("/student")
  23. public List<Student> getStudentList();
  24. }

6:接口实现类
  1. package com.qqw.webserviceImpl;
  2. import java.util.List;
  3. import java.util.ArrayList;
  4. import javax.ws.rs.GET;
  5. import javax.ws.rs.Path;
  6. import javax.ws.rs.PathParam;
  7. import org.springframework.stereotype.Component;
  8. import com.qqw.entity.Student;
  9. import com.qqw.webservice.StudentService;
  10. @Component("studentService")
  11. public class StudenntServiceImpl implements StudentService {
  12. @Override
  13. public Student getStudentById( Integer id) {
  14. Student student=null;
  15. if(id==1){
  16. student=new Student("张三", "男", 20);
  17. }else{
  18. student=new Student("李四娘", "女", 30);
  19. }
  20. return student;
  21. }
  22. @Override
  23. public List<Student> getStudentList() {
  24. List<Student> list=new ArrayList<Student>();
  25. Student student=new Student("张三", "男", 20);
  26. Student student1=new Student("李四娘", "女", 30);
  27. Student student2=new Student("李1娘", "女", 31);
  28. Student student3=new Student("李2娘", "女", 32);
  29. Student student4=new Student("李3娘", "女", 20);
  30. list.add(student);
  31. list.add(student1);
  32. list.add(student2);
  33. list.add(student3);
  34. list.add(student4);
  35. return list;
  36. }
  37. @Override
  38. public String getStatus(String name, Integer age) {
  39. String flag="FAULSE";
  40. if("tom狗".equals(name) && age==20){
  41. flag="TRUE";
  42. }
  43. return flag;
  44. }
  45. }

至此项目与spring整合完毕,把项目部署到tomcat。

测试第一个接口:http://localhost:8080/CXF_Spring_restful/webservice/studentService/status/tom狗/30,结果:

控制台信息:

测试第二个接口:

第三个接口:

到此,CXF系列完毕!!!完整代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多