CXF+Spring+JAXB+Json构建Restful服务
话不多说,先看详细的样例:
文件文件夹结构:
web.xml
<?xml version="1.0" encoding="UTF-8"? >
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>platform</display-name>
<!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔 此參数用于后面的Spring Context
Loader -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/applicationContext.xml,classpath:/applicationContext-rs.xml
</param-value>
</context-param> <!-- Character Encoding filter -->
<filter>
<filter-name>encodingFilter</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>
</filter> <filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- Spring 刷新Introspector防止内存泄露 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- Apache CXF Servlet 配置 -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Spring的xml—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:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
default-lazy-init="true">
<description>Spring公共配置文件</description> <!-- 使用annotation 自己主动注冊bean,并保证@Required,@Autowired的属性被注入 -->
<context:component-scan base-package="com.zd.daoImpl.*,com.zd.beanImpl.*,com.zd.serviceImpl.*,com.zd.service.*">
</context:component-scan>
<bean id="dozerMapper" class="org.dozer.DozerBeanMapper"
lazy-init="false" /> <!-- Matrix BPM -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
</beans>
RestFul的xml—applicationContext-rs.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:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <description>Rails CM 的全部RESTFUL 服务配置</description> <context:component-scan base-package="com.zd" />
<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"></bean> <jaxrs:server id="restContainer" address="/">
<jaxrs:inInterceptors>
</jaxrs:inInterceptors>
<jaxrs:serviceBeans>
<ref bean="userinfoServiceImpl" />
</jaxrs:serviceBeans>
</jaxrs:server> </beans>
实体:
package com.zd.entity;
import java.io.Serializable; /** 系统用户表 **/
public class UserInfo implements Serializable { private String id;
private String name;// 用户姓名
private String sex;// 性别
private String idNo;//身份证号码
private String account;// 账号
private String pwd;// password public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAccount() {
return account;
} public void setAccount(String account) {
this.account = account;
} public String getPwd() {
return pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getIdNo() {
return idNo;
} public void setIdNo(String idNo) {
this.idNo = idNo;
}
}
构建的XML实体:
package com.zd.dtd; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType; @XmlRootElement(name="UserInfoDTO")
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType
public class UserInfoDTD {
private String id;
private String name;// 用户姓名
private String sex;// 性别
private String idNo;//身份证号码
private String account;// 账号
private String pwd;// password
@XmlElement(name="id",required=false)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement(name="name",required=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name="account",required=false)
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
@XmlElement(name="sex",required=false)
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@XmlElement(name="sex",required=false)
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
@XmlElement(name="sex",required=false)
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
接口服务层:
package com.zd.service; import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; @Path("/Userinfo")
public interface UserinfoService { /**
* 依据id获取用户信息
* @param id 用户id
* @return json数据
*/
@GET
@Path("/getUserinfo")
@Produces({ "text/html;charset=utf-8", MediaType.TEXT_HTML })
public Response getBasicUserInfo(@QueryParam("id") String id);
}
服务实现层:
package com.zd.serviceImpl; import javax.ws.rs.core.Response; import net.sf.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import com.zd.beanImpl.UserBeanImpl;
import com.zd.dtd.UserInfoDTD;
import com.zd.entity.UserInfo;
import com.zd.service.UserinfoService; @Component
public class UserinfoServiceImpl implements UserinfoService { @Autowired(required=true)
private UserBeanImpl userBeanImpl; @Override
public Response getBasicUserInfo(String id) { UserInfo userInfo = userBeanImpl.getUserInfo(id); UserInfoDTD userDTD=new UserInfoDTD();
userDTD.setSex(userInfo.getSex());
userDTD.setId(userInfo.getId());
userDTD.setIdNo(userInfo.getIdNo());
userDTD.setName(userInfo.getName());
userDTD.setPwd(userInfo.getPwd());
userDTD.setAccount(userInfo.getAccount());
//json转换
JSONArray jsonArray = JSONArray.fromObject(userInfo);
return Response.ok(jsonArray.toString()).build();
}
}
ServiceBean:
package com.zd.beanImpl; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.zd.daoImpl.UserinfoDaoImpl;
import com.zd.entity.UserInfo; @Service
//默认将类中的全部函数纳入事务管理.
@Transactional
public class UserBeanImpl {
@Autowired(required=true)
private UserinfoDaoImpl userinfoDaoImpl;
public UserInfo getUserInfo(String id){
UserInfo userInfo=userinfoDaoImpl.getUserinfo(id);
return userInfo; }
}
Dao:
package com.zd.daoImpl;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import com.zd.entity.UserInfo;
@Repository
//默认将类中的全部函数纳入事务管理.
@Transactional
public class UserinfoDaoImpl {
public UserInfo getUserinfo(String id){
UserInfo userInfo=new UserInfo();
userInfo.setAccount("zhudan");
userInfo.setId("1111");
userInfo.setId("520911188119186770");
userInfo.setName("朱丹");
userInfo.setPwd("1221");
userInfo.setSex("女");
return userInfo;
}
}
页面訪问地址:
http://localhost:8080/restful/rest/Userinfo/getUserinfo
页面訪问结果:
总结:
先由这个样例。宏观了解下Restful的服务搭建。Restful的细节东西再在以后的运用中深入理解
CXF+Spring+JAXB+Json构建Restful服务的更多相关文章
- SpringBoot实战(十)之使用Spring Boot Actuator构建RESTful Web服务
一.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- Springboot & Mybatis 构建restful 服务五
Springboot & Mybatis 构建restful 服务五 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务四 2 restful ...
- Springboot & Mybatis 构建restful 服务二
Springboot & Mybatis 构建restful 服务二 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务一 2 restful ...
- Springboot & Mybatis 构建restful 服务
Springboot & Mybatis 构建restful 服务一 1 前置条件 jdk测试:java -version maven测试:命令行之行mvn -v eclipse及maven插 ...
- 用Jersey构建RESTful服务7--Jersey+SQLServer+Hibernate4.3+Spring3.2
一.整体说明 本例执行演示了用 Jersey 构建 RESTful 服务中.怎样集成 Spring3 二.环境 1.上文的项目RestDemo 2.Spring及其它相关的jar ,导入项目 三.配置 ...
- jersey+maven构建restful服务
一.新建一个Maven Web项目 a) 新建一个简单的Maven项目 b) 将简单的Maven项目转成Web项目 (若没出现further configuration available--或里面的 ...
- Springboot & Mybatis 构建restful 服务四
Springboot & Mybatis 构建restful 服务四 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务三 2 restful ...
- Springboot & Mybatis 构建restful 服务三
Springboot & Mybatis 构建restful 服务三 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务二 2 restful ...
- 使用spring mvc或者resteasy构建restful服务
看到最近一个项目里用resteasy来构建restful接口,有点不明白,不少Spring mvc4.0以后也可以很方面的实现restful服务吗,为啥还要在Spring MVC的项目里还引入rest ...
随机推荐
- VS2010调试技巧
最近合作开发,代码已经完成了,但是一调试,错误一大堆,由于是合作开发,不确定是哪层的错误,得一步步得走,很是费时费力,平时调试的技巧用的不多,现在集中调试,结果有些手忙脚乱,效率也很低,所以在网上找了 ...
- HttpWebRequest的使用
HttpWebRequest类主要利用HTTP 协议和服务器交互,通常是通过 GET 和 POST 两种方式来对数据进行获取和提交.下面对这两种方式进行一下说明: GET 方式 GET 方式通过在网络 ...
- JS操作JSON常用方法
一.JSON字符串的替换 工作经常遇到这样的字符串,如下: 需要经过替换后,才能从字符串转化成JSON对象.这里我们需要用JS实现replaceAll的功能, 将所有的 ' \\" ' 替换 ...
- 【转】php里面也可以使用协程
原文链接:http://blog.51cto.com/chinalx1/2089327 http://nikic.github.io/2012/12/22/Cooperative-multitaski ...
- 如何将DB2的数据库转换到mySQL中?
经过几次尝试最终找到解决的办法,因为网上并没有详细说明,所以下面我将详细的步骤记录如下: 1. 大前提是你已经安装好DB2服务器和mySQL服务器,现在只是借用Navicat for MySQL这个软 ...
- [Webpack] Analyze a Production JavaScript Bundle with webpack-bundle-analyzer
Bundle size has a huge impact on JavaScript performance. It's not just about download speed, but all ...
- 【python】用正则表达式进行文字局部替换
比如有个字符串http://www.55188.com/thread-8306254-2-3.html,需要把8306254后面的2替换成其它数字,其它保持不变,该如何办呢?请看代码: import ...
- 安装apache+php记录
安装apache yum install httpd 修改apache配置文件,可以修改apache的默认端口号,根目录等 /etc/httpd/conf/httpd.conf 启动/重启apache ...
- iOS类方法实例方法 与 self
Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method).工厂方法的称 ...
- iOS \U7ea2 乱码 转换
通常网络请求的数据,如果不做处理在输出时显示是 \U 之类的编码的: 不需要导入别的类库解决方法 - (NSString *)replaceUnicode:(NSString *)unicodeStr ...