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 ...
随机推荐
- Maven私库安装与配置
Maven私库安装与配置 https://www.cnblogs.com/dengyulinBlog/p/6398310.html
- SharePoint 2013网站突然不能登录了。
SharePoint 2013网站突然不能登录了,访问的时候,总是报错: The list has not shared with you. 原因: 原来我不知道什么时候把web applicat ...
- 剑指offer面试题12-打印1到最大的n位数
题目: 输入一个数字n,按顺序打印出从1最大的n位十进制数.比方输入3,则打印出1.2.3最大的三位数即999 这道题的主要陷阱就在大数的处理,仅仅要将这个考虑进去,用字符串来表示.就好说了. 那差点 ...
- Office WORD如何关闭自动检查语法
只要把打钩的地方全部去掉即可.
- [转]自定义Drawable实现灵动的红鲤鱼动画(上篇)
此篇中的小鱼动画是模仿国外一个大牛做的flash动画,第一眼就爱上它了,简约灵动又不失美学,于是抽空试着尝试了一下,如下是我用Android实现的效果图: 小鱼儿 由于整个绘制分析过程比较繁琐所以 ...
- [转]intellij 13新建javaweb项目并用tomcat 7启动
来自:http://blog.csdn.net/little__zm/article/details/19570535 对intellij不熟,找了很多文章,只这篇最为顺利.其他都有各种各校的问题,先 ...
- 你的灯亮着吗pdf –读书笔记
十句话概括这本书 1.确认问题比找到方法更重要 2.解决问题其实解决的是"人的期待" 3.你在解决问题中可能会发现新的机会 4.要了解问题的可变性和复杂性 5.站在用户而不 ...
- 虚拟机Linux下一直获取不到ip怎么办
虚拟机Linux下一直获取不到ip怎么办 Ifconfig -a 只显示了本地的ip127.0.0.1 和另一个eth1 但是找不到ip地址. 需要做的是: 申请ipdhclient eth1 另外释 ...
- @Value 和 @ConfigurationProperties 获取值的比较
1.不同点 (1)@ConfigurationProperties(prefix = "person") 功能:批量注入配置文件中的属性 SpEL:不支持表达式 JSR303数据校 ...
- CSS3 calc()函数使用
1.calc是什么? calc是英文单词calculate(计算)的缩写,用于动态计算长度值. calc()函数支持 "+", "-", "*&quo ...