-
新建maven工程
- 新建maven工程
-
添加pom依赖
-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>cxf-restful</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>cxf-restful Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <cxf-version>3.1.1</cxf-version> <spring-version>5.1.5.RELEASE</spring-version> <slfj-version>1.7.25</slfj-version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slfj-version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slfj-version}</version> <!--<scope>test</scope> --> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>${cxf-version}</version> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <version>5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxrs</artifactId> <version>${cxf-version}</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-jaxrs</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-xc</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf-version}</version> <scope>compile</scope> </dependency> </dependencies> <build> <finalName>cxf-restful</finalName> </build> </project>
-
-
编辑web.xml
-
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>CXF Restful Demo</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置CXFservlet --> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping> <!-- 设置允许跨域 视情况而定是否需要支持跨域--> <filter> <filter-name>CORSFilter</filter-name> <filter-class>com.demo.cxf.restful.filter.CORSFilter</filter-class> </filter> <filter-mapping> <filter-name>CORSFilter</filter-name> <url-pattern>/service/*</url-pattern> </filter-mapping> </web-app>
-
-
编写测试代码
- 添加配置文件
- 添加log4j.properties配置文件,方便输出日志
log4j.rootLogger=INFO, console,dailyFile log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.dailyFile.Threshold=DEBUG log4j.appender.dailyFile.ImmediateFlush=true log4j.appender.dailyFile.Append=true log4j.appender.dailyFile.File=/logs/log.log4j log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
- /src/main/resources/META-INF/spring目录下新建applicationContent-rest.xml(cxf配置文件)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:cxf="http://cxf.apache.org/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation=" http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="InquiryServiceImpl" class="com.demo.cxf.restful.service.impl.InquiryServiceImpl" /> <bean id="logOutbound" class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> <bean id="logInbound" class="org.apache.cxf.interceptor.LoggingInInterceptor" /> <jaxrs:server id="InquiryService" address="/InquiryService"> <!--输入拦截器设置 --> <jaxrs:inInterceptors> <ref bean="logInbound" /> </jaxrs:inInterceptors> <!--serviceBeans:暴露的WebService服务类 --> <jaxrs:serviceBeans> <ref bean="InquiryServiceImpl"/> </jaxrs:serviceBeans> <!--输出拦截器设置 --> <jaxrs:outInterceptors> <ref bean="logOutbound" /> </jaxrs:outInterceptors> <!--支持的数据传输格式 --> <jaxrs:extensionMappings> <entry key="json" value="application/json"/> <entry key="xml" value="application/xml"/> </jaxrs:extensionMappings> <!--编码格式 --> <jaxrs:languageMappings> <entry key="en" value="en-gb"/> </jaxrs:languageMappings> <!--对象转换 --> <jaxrs:providers> <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" /> </jaxrs:providers> </jaxrs:server> </beans>
- 添加log4j.properties配置文件,方便输出日志
- 编写java代码
- 新建实体类 Student.java
package com.demo.cxf.restful.entity; import java.io.Serializable; import org.codehaus.jackson.annotate.JsonProperty; public class Student implements Serializable{ private static final long serialVersionUID = 2762010594480998117L; @JsonProperty("ID") private Long id; @JsonProperty("NAME") private String name; @JsonProperty("SEX") private String sex; @JsonProperty("AGE") private Integer age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Student() { } public Student(Long id, String name, String sex, Integer age) { super(); this.id = id; this.name = name; this.sex = sex; this.age = age; } }
- 新建接口类 InquiryService.java
package com.demo.cxf.restful.service.impl; import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import com.demo.cxf.restful.entity.Student; @Produces(MediaType.APPLICATION_JSON) public interface InquiryService { @GET @Path("/student") public List<Student> list(); @POST @Path("/getStudentById") @Consumes(MediaType.APPLICATION_JSON) public Student getStudentById(Student stu); @GET @Path("/getStudent/{id}") @Consumes({ MediaType.TEXT_XML, MediaType.APPLICATION_JSON }) public Student getStudent(@PathParam("id") Integer id); @GET @Path("/studentParam") @Consumes({ MediaType.TEXT_XML, MediaType.APPLICATION_JSON }) public Student studentParam(@QueryParam("id") Integer id); }
- 新建接口实现类 InquiryServiceImpl.java
package com.demo.cxf.restful.service.impl; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.demo.cxf.restful.entity.Student; public class InquiryServiceImpl implements InquiryService { private static final Logger logger = LoggerFactory.getLogger(InquiryServiceImpl.class); @Override public List<Student> list() { List<Student> result = initData(); return result; } @Override public Student getStudentById(Student param) { logger.info("param" + param); List<Student> result = initData(); return result.get(param.getId().intValue()); } @Override public Student getStudent(Integer id){ logger.info("id" + id); List<Student> result = initData(); return result.get(id); } @Override public Student studentParam(Integer id) { logger.info("id" + id); List<Student> result = initData(); return result.get(id); } private List<Student> initData(){ List<Student> result = new ArrayList<Student>(); for (int i = 0; i < 10; i++) { Student stu = null; if(i%2 == 0) { stu = new Student(Long.valueOf(i), "Jack" + i, "男", i); }else { stu = new Student(Long.valueOf(i), "Mary" + i, "女", i); } result.add(stu); } return result; } }
- 自定义 跨域过滤器 CORSFilter.java
package com.demo.cxf.restful.filter; import java.io.IOException; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CORSFilter implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { //设置跨域请求 HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String[] allowDomains = {"http://runapi.showdoc.cc"}; Set allowOrigins = new HashSet(Arrays.asList(allowDomains)); String originHeads = request.getHeader("origin"); if(allowOrigins.contains(originHeads)){ response.setHeader("Access-Control-Allow-Origin", originHeads); response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,HEAD,PUT,PATCH"); response.setHeader("Access-Control-Max-Age", "36000"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Connection, User-Agent, Cookie"); response.setHeader("Access-Control-Allow-Credentials","true"); } chain.doFilter(req, response); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
- 新建实体类 Student.java
- 添加配置文件
-
测试接口
- 至此,使用cxf开发rrestful接口已经开发完成了,下面就是测试接口访问情况
使用cxf开发restful接口
最新推荐文章于 2024-06-24 18:39:05 发布