您的位置:首页 > 编程语言 > Java开发

Spring集成Jersey开发,实现rest约束例子

2017-11-03 17:38 176 查看
Spring集成Jersey开发,实现rest约束实例

前言

第一步创建Maven项目

第二步修改项目参数转换成javaweb项目

第三步配置web参数
配置pomxml依赖jar

创建resources资源包创建applicationContextxml文件

在WEB-INF目录下创建webxml文件

第四步创建资源类
创建HelloResourcesjava资源

创建管理类

第五步测试
创建个运行服务器

前言

读这篇文章的前提是我们应当知道Jersey框架是对RESTful约束的一个实现的框架,这里假设大家都明白Jersey框架以及RESTful约束。项目管理使用Maven。当然Spring相关知识是基础,你应该会,不然还搞啥技术?

这篇文章的目的是为了在Jersey使用Spring的注解功能,为了让Jersey能使用Spring管理的实例。

第一步:创建Maven项目

创建项目名是JerseySpring的maven项目

注意“archetype”选择”maven-archetype-quickstart”

项目结构如下:



第二步:修改项目参数,转换成javaweb项目

刚创建的maven是自动设置成打包“jar”的项目,所以需要设置成’war’。

1.项目右键选择:Properties->Project Facets->Convert to facted form…按下图红框标注选择:



点确定,完成javaweb项目转换,如果maven没设置编译水平是高版本的话,默认是1.5的,当然太低了,这里需要设置。

设置“java compiler和java build buildPath”就可以了,然后pom.xml里设置插件编译水平比如:1.7.如下:

<build>
<finalName>Jersey</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>


如果想统一设置,那在创建项目之前设置maven的默认编译水平。在maven的配置文件conf/setting.xml里添加如下:

<profile>
<id>jdk17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>


第三步:配置web参数

1.配置pom.xml依赖jar

spring使用4.2.0.RELEASE,jersey-spring使用1.18版本。

pom.xml如下:

<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>

<groupId>com.jax</groupId>
<artifactId>JerseySpring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<name>JerseySpring</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.7</java.version>
<java.encoding>UTF-8</java.encoding>
<spring-version>4.2.0.RELEASE</spring-version>
<aspectj-version>1.8.6</aspectj-version>
<jersey-spring>1.18</jersey-spring>
</properties>

<dependencies>
<!-- ================================================= -->
<!-- Spring框架 -->
<!-- ================================================= -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</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-context-support</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</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-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring-version}</version>
</dependency>

<!-- ================================================= -->
<!-- AOP相关依赖 -->
<!-- ================================================= -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj-version}</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>

<!-- Jersey + Spring -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>${jersey-spring}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>

</dependencies>

<build> <finalName>Jersey</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build>
</project>


pom.xml文件里引入的spring框架相关jar和jersey-spring.jar。不需要引入jersey-container-servlet-core.jar。

2.创建resources资源包,创建applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:task="http://www.springframework.org/schema/task" xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:component-scan base-package="com.jax" />
<context:annotation-config></context:annotation-config>
</beans>


扫描com.jar包下所以注解,包括spring注解和jersey注解,这里有个坑,如果单单扫描spring的注解,不扫描jersey注解是会报错的,所以base-package尽量是大范围的,把jersey资源文件也扫描进去。

3.在WEB-INF目录下创建web.xml文件

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>JerseySpring</display-name>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.jax.Jersey</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>


加载了applicationContext.xml文件,设置编码过滤器为utf-8,

使用“com.sun.jersey.spi.spring.container.servlet.SpringServlet”创建servlet,这里注意

1.

<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.jax</param-value>
</init-param>


这个配置其实没啥作用,param-value可以设置为任何字符串,但必需有这个配置,不然报错,建议尽量设置成项目上层的目录,比如这里使用“com.jax”。

2.不能使用“org.glassfish.jersey.servlet.ServletContainer”去创建servlet。

第四步:创建资源类

1.创建HelloResources.java资源

package com.jax.JerseySpring.api;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.jax.JerseySpring.mgr.acct.IAcctMgr;

@Component
@Path("/demo")
public class HelloResources {

@Autowired
public IAcctMgr acctMgr;

@GET
@Path("/hello")
public String acct() {
String result = "failure";
try {
result = acctMgr.getAcctByCd("9527");
System.out.println("结果:" + result);
} catch (Exception e) {
System.out.println(e);
}
return result;
}
}


@Component:是spring里标注组件的注解

@Path:用来为资源类或方法定义URI

@GET:表明被注解的方法响应HTTP GET请求,@POST、@PUT和@DELETE同理

其实Jersey的注解就那几个,数都能数过来。

2.创建管理类

这个管理类就是server层的类,其实这篇文章的目的是为了在jersey资源里使用spring的注解

接口类IAcctMgr.java:

package com.jax.JerseySpring.mgr.acct;

public interface IAcctMgr {
public String getAcctByCd(String cd);
}


实现类AcctMgrImpl.java:

package com.jax.JerseySpring.mgr.acct.impl;

import org.springframework.stereotype.Service;

import com.jax.JerseySpring.mgr.acct.IAcctMgr;

@Service
public class AcctMgrImpl implements IAcctMgr {

@Override
public String getAcctByCd(String cd) {
return "查询到帐户cd:" + cd + "的信息";
}
}


重点注意一个注解@Service,标识组件,别忘了。

到目前为止,整个demo就完成了,让它在tomcat里跑起来吧。

第五步:测试

1.创建个运行服务器

这里使用tomcat,将JerseySpring发布到tomcat容器里。成功运行没报错的情况下,在浏览器里输入:

http://127.0.0.1:8080/JerseySpring/api/demo/hello


结果如下:



说明与spring成功接入,能使用spring的注解了,标准说法是:能成功的将创建的实例存放在jersey的SpringServlet容器里。

CSDN上传资源不能免费,我也是醉了,这里不好意思了,这里使用百度云:

JerseySpring例子下载

密码: 2itw
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: