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;// 密码

	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;// 密码
	@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的细节东西再在以后的运用中深入理解

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 16:00:27

CXF+Spring+JAXB+Json构建Restful服务的相关文章

使用Spring MVC 4构建Restful服务

使用Spring MVC 4构建RESTful服务相对于其它框架来说,有很多优势.首先,Spring MVC 4作为Spring的框架之一,可以很好地与Spring进行集成.其次,Spring MVC 4的拦截器是在方法层级上的拦截,相对于其它MVC框架(如Struts2)的拦截器具有更高的效率.再者,Spring MVC 4采用基于注解的配置,入手容易,开发灵活. Spring MVC 4采用的是jacson解析JSON.jacson一款非常高效强大的JSON工具类,可以轻松地在JAVA对象与

使用Spring MVC 4构建Restful服务 搭建Spring MVC 4开发环境八步走

A 代码生成器(开发利器);     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安

SpringBoot实战(十)之使用Spring Boot Actuator构建RESTful Web服务

一.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <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.

用Jersey构建RESTful服务7--Jersey+SQLServer+Hibernate4.3+Spring3.2

一.整体说明 本例执行演示了用 Jersey 构建 RESTful 服务中.怎样集成 Spring3 二.环境 1.上文的项目RestDemo 2.Spring及其它相关的jar ,导入项目 三.配置 1.根文件夹下下创建 Spring 的配置文件applicationContext.xml: 配置例如以下: 四.执行 1.先执行项目 2.执行UserClient.java測试,控制台输出例如以下 ****添加用户addUser**** ****查询全部getAllUsers**** [{"us

使用ASP.Net WebAPI构建REST-ful 服务(一)——简单的示例

由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net Web应用程序(我这里用的是Visual Studio 2013,它已经内置了Web API2). 在出来的模板中选择Empty(空项目),并勾选WebAPI.点击确定后,就创建了一个空的WebAPI服务. 此时只有一个空项目,还没有任何功能,在进行下一步之前,首先我们来看一下REST的基本操作模

Springboot &amp; Mybatis 构建restful 服务四

Springboot & Mybatis 构建restful 服务四 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务三 2 restful service 添加 Apache POI生成 Excel 文件 1)修改 POM.xml文件 添加 Apache POI 的依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-oo

Springboot &amp; Mybatis 构建restful 服务三

Springboot & Mybatis 构建restful 服务三 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务二 2 restful service 添加日志 1)新建 logback.xml文件(配置生成的日志文件的格式) src/main/resources/logback.xml <?xml version="1.0" encoding="UTF-8"?>   <!-- 设置根

jersey+maven构建restful服务

一.新建一个Maven Web项目 a) 新建一个简单的Maven项目 b) 将简单的Maven项目转成Web项目 (若没出现further configuration available--或里面的内容不是context相关设置,将Dynamic Web Module版本调高一些试试就自动出现了) 二.修改pom文件,添加jersey依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="htt

构建RESTful服务(使用Spring Data JPA)

一.Restful简介REST是一种Web软件结构风格,而不是一种标准,匹配或兼容这种架构风格称之为REST服务,REST服务简洁并且有层次,REST通常基于HTTP,URI和XML以及HTML这些现有的广泛流行的协议和标准,在REST中,资源是由URI来指定的,对资源的增删改查也是通过HTTP协议提供的POST,PUT,GET,DELETE等方法实现,使用REST可以更高效率的利用缓存来提高响应速度,同时REST中的通信会话状态有客户端来维护,这可以让不同服务器来处理一系列请求中的不同请求,进