- 浏览: 187999 次
- 性别:
- 来自: 成都
-
最新评论
-
ls_autoction:
非常谢谢!:oops:
webservice注解 -
ganbo:
helloword
hibernate之openSession和getCurrentSession -
ganbo:
...
hibernate之openSession和getCurrentSession -
zizhengwang:
文章介绍的很全面,帮助我解决了问题,谢谢
hibernate之级联cascade和关系维持inverse -
yccn1984:
/** * 子类进行注入 * ...
DAO和Service公共抽象接口实现
rest接口
import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; import com.zyn.ssh.pojo.Teacher; import com.zyn.ssh.service.rest.base.ListData; import com.zyn.ssh.service.rest.base.PageData; import com.zyn.ssh.service.rest.base.SimpleData; import com.zyn.ssh.service.rest.base.SingleData; @Path("") public interface TeacherResource { @Path("/") @GET public ListData<Teacher> listTeachers(); @Path("/{pageNo}/{pageSize}") @GET public PageData<Teacher> listTeachersByPage(@PathParam("pageNo")int pageNo,@PathParam("pageSize")int pageSize); @Path("/") @POST public SingleData<Teacher> addTeacher(@QueryParam("name") String name); @Path("/{id}") @DELETE public SimpleData<String> deleteTeacher(@PathParam("id") int id); @Path("/{id}") @PUT public SingleData<Teacher> updateTeacher(@PathParam("id")int id,@QueryParam("name") String name); @Path("/{id}") @GET public SingleData<Teacher> getTeacher(@PathParam("id") int id); }
rest接口实现类
public class TeacherResourceImpl implements TeacherResource { @Resource(name = "teacherService") private TeacherService teacherService; public ListData<Teacher> listTeachers() { ListData<Teacher> listData = new ListData<Teacher>(); try { RetdObj<List<Teacher>> ret = this.teacherService.getAll(); listData.setData(ret.getRealObj()); System.out.println(ret.getRealObj().size()); listData.setCode(RespCode.valueOf(ret.getCode())); } catch (Exception e) { listData.setCode(RespCode.EX_APP); e.printStackTrace(); } return listData; } public PageData<Teacher> listTeachersByPage(int pageNo, int pageSize) { PageData<Teacher> pageData = new PageData<Teacher>(); Page<Teacher> page = new Page<Teacher>(); page.setPageNo(pageNo); page.setPageSize(pageSize); try { RetdObj<Page<Teacher>> ret = this.teacherService .findAllByPage(page); pageData.setData(ret.getRealObj().getResult()); pageData.setPageinfo(CommonUtils.setPageInfoFromPage(ret .getRealObj())); pageData.setCode(RespCode.valueOf(ret.getCode())); } catch (Exception e) { pageData.setCode(RespCode.EX_APP); e.printStackTrace(); } return pageData; } public SingleData<Teacher> addTeacher(String name) { SingleData<Teacher> singleData = new SingleData<Teacher>(); if ("".equals(name)) { singleData.setCode(RespCode.EX_PARAM); return singleData; } Teacher teacher = new Teacher(name); try { this.teacherService.save(teacher); singleData.setCode(RespCode.PASS_OK); singleData.setData(teacher); } catch (Exception e) { e.printStackTrace(); singleData.setCode(RespCode.EX_APP); } return singleData; } public SimpleData<String> deleteTeacher(int id) { SimpleData<String> simpleData = new SimpleData<String>(); try { this.teacherService.delete(id); simpleData.setCode(RespCode.PASS_OK); } catch (Exception e) { e.printStackTrace(); simpleData.setCode(RespCode.EX_APP); } return simpleData; } public SingleData<Teacher> updateTeacher(int id, String name) { SingleData<Teacher> singleData = new SingleData<Teacher>(); if ("".equals(name)) { singleData.setCode(RespCode.EX_PARAM); return singleData; } try { Teacher teacher = this.teacherService.findById(id).getRealObj(); if (teacher == null) { singleData.setCode(RespCode.PASS_NODATA); } else { teacher.setName(name); this.teacherService.update(teacher); singleData.setCode(RespCode.PASS_OK); singleData.setData(teacher); } } catch (Exception e) { e.printStackTrace(); singleData.setCode(RespCode.EX_APP); } return singleData; } public SingleData<Teacher> getTeacher(int id) { SingleData<Teacher> singleData = new SingleData<Teacher>(); try{ RetdObj<Teacher> ret = this.teacherService.findById(id); singleData.setCode(RespCode.valueOf(ret.getCode())); singleData.setData(ret.getRealObj()); }catch(Exception e){ singleData.setCode(RespCode.EX_APP); e.printStackTrace(); } return singleData; } }
返回简单对象,基本类型包装类:
@XmlRootElement(name = "base") public class BaseRespObj implements Serializable { private static final long serialVersionUID = -3197616622643404121L; @XmlElement(name = "infocode") private RespCode respCode; public BaseRespObj() { this.setCode(RespCode.NODEFINE); } public void setCode(RespCode retdCodeType) { this.respCode = retdCodeType; } public int getCode() { return respCode.getCode(); } }
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class SimpleData<T> extends BaseRespObj{ @XmlElement private T result; public T getResult() { return result; } public void setResult(T result) { this.result = result; } }
返回单一实体对象包装类
@SuppressWarnings("serial") @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlSeeAlso(value={Teacher.class}) public class SingleData<RealObject> extends BaseRespObj{ @XmlElement private RealObject data; public RealObject getData() { return data; } public void setData(RealObject data) { this.data = data; } }
返回list集合包装类
@SuppressWarnings("serial") @XmlAccessorType(XmlAccessType.FIELD) @XmlSeeAlso(value={Teacher.class}) @XmlRootElement public class ListData<T> extends BaseRespObj{ @XmlElement private List<T> data; public List<T> getData() { return data; } public void setData(List<T> data) { this.data = data; } }
返回page分页数据包装类
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "totalResults", "currentPage", "onePageSize", "firstResult", "nextPage", "previousPage", "totalPage" }) public class PageRespObj implements Serializable { private static final long serialVersionUID = -2940983877096774934L; private int currentPage; // 当前页 private int firstResult; // 当前页的起始记录 private long totalResults; // 总共记录数 private int onePageSize; // 每页的数量 private long totalPage; // 总共多少页 private int nextPage; // 下一页 private int previousPage; // 上一页 public PageRespObj() { } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getFirstResult() { return firstResult; } public void setFirstResult(int firstResult) { this.firstResult = firstResult; } public long getTotalResults() { return totalResults; } public void setTotalResults(long totalResults) { this.totalResults = totalResults; } public int getOnePageSize() { return onePageSize; } public void setOnePageSize(int onePageSize) { this.onePageSize = onePageSize; } public long getTotalPage() { return totalPage; } public void setTotalPage(long totalPage) { this.totalPage = totalPage; } public int getNextPage() { return nextPage; } public void setNextPage(int nextPage) { this.nextPage = nextPage; } public int getPreviousPage() { return previousPage; } public void setPreviousPage(int previousPage) { this.previousPage = previousPage; } }
@XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlSeeAlso(value={Teacher.class}) public class PageData<T> extends BaseRespObj{ @XmlElement private PageRespObj pageinfo; @XmlElementWrapper(name="pageData") public List<T> data; public PageRespObj getPageinfo() { return pageinfo; } public void setPageinfo(PageRespObj pageinfo) { this.pageinfo = pageinfo; } public List<T> getData() { return data; } public void setData(List<T> data) { this.data = data; } }
返回的系统状态码
@XmlRootElement @XmlEnum public enum RespCode { @XmlEnumValue("0")NODEFINE(0), @XmlEnumValue("200")PASS_OK(200), @XmlEnumValue("201")PASS_NODATA(201), @XmlEnumValue("500")EX_PARAM(500), @XmlEnumValue("501")EX_APP(501), @XmlEnumValue("502")EX_AUTH(502), @XmlEnumValue("600")EX_UNKNOWN(600); private int code; RespCode(int code) { this.code = code; } public int getCode() { return this.code; } public static RespCode valueOf(int code) { switch(code) { case 0 : return NODEFINE; case 200 : return PASS_OK; case 201 : return PASS_NODATA; case 500 : return EX_PARAM; case 501 : return EX_APP; case 502 : return EX_AUTH; case 600 : return EX_UNKNOWN; default : return null; } } }
将service层返回的page数据封装成rest返回类型帮助类
public class CommonUtils { /** * * @param page * @return */ @SuppressWarnings("rawtypes") public static PageRespObj setPageInfoFromPage(Page page) { int currentPage = 0; int onePageSize = 0; long totalResults = 0; int firstResult = 0; int nextPage = 0; int previousPage = 0; long totalPage = 0; if (page != null) { currentPage = page.getPageNo(); onePageSize = page.getPageSize(); totalResults = page.getTotalCount(); firstResult = page.getFirst(); nextPage = page.getNextPage(); previousPage = page.getPrePage(); totalPage = page.getTotalPages(); PageRespObj obj = new PageRespObj(); obj.setCurrentPage(currentPage); obj.setOnePageSize(onePageSize); obj.setTotalResults(totalResults); obj.setFirstResult(firstResult); obj.setNextPage(nextPage); obj.setPreviousPage(previousPage); obj.setTotalPage(totalPage); return obj; } else { return null; } } }
配置cxf
<?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:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation=" http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <cxf:bus> <cxf:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" /> </cxf:inInterceptors> </cxf:bus> <jaxrs:server id="teacherRestResource" address="/teachers"> <jaxrs:extensionMappings> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> </jaxrs:extensionMappings> <jaxrs:serviceBeans> <bean class="com.zyn.ssh.service.rest.impl.TeacherResourceImpl" /> </jaxrs:serviceBeans> </jaxrs:server> </beans>
评论
2 楼
liuxiang_eyes
2013-03-22
Hi,我目前也在做cxf rest,做分页也是只能用@XmlSeeAlso(value={Teacher.class})方式,但是对于PageData就不能通用了,在打成jar包后,其他分页无法复用。
请问你现在是否有能好的分页方式分享一下。
请问你现在是否有能好的分页方式分享一下。
1 楼
amolieshou
2012-09-01
基本按你的做了,但是没有相应的资源发布出来,但是我把接口上的path注释在实现类上复制了一遍就好了,lz有遇到这个问题么?请教是怎么解决的呢
发表评论
-
spring-mvc属性编辑器绑定和传文件
2011-10-27 09:58 1339@InitBinder public void i ... -
spring jms
2011-10-25 17:53 1771简介 ActiveMQ 是 ... -
webservice注解
2011-10-23 16:32 40839JAX-WS 注释 “基于 XML 的 Web ... -
tomcat集群 部署rest服务
2011-10-23 13:24 4968一、软件准备 Apache 2.2 : http ... -
hibernate+memcached一种orm+cached解决方案
2011-10-22 14:04 27231、首先配置hibernate,使之支持二级缓存: @ ... -
spring +jotm分布式数据库
2011-10-20 22:28 6007首先引入jotm和xpool包,通过maven引入 & ... -
spring通过jndi创建数据源
2011-10-20 19:43 1231<bean id="jndiDS&quo ... -
spring、hibernate源码分析二
2011-10-19 09:10 2724从上篇文章分析得出,hibernate初始化时,flushBe ... -
spring、hibernate源码分析一
2011-10-19 09:11 2021<bean id="dataSource ... -
hibernate之openSession和getCurrentSession
2011-10-18 14:54 3156hibernate通过sessionFactory有两种方式获 ... -
hibernate之ManyToMany
2011-10-18 11:43 1236一个老师有多个学生,同样一个学生有多个老师,配置如下: ... -
hibernate之级联cascade和关系维持inverse
2011-10-18 11:11 21811hibernate的关联关系,重点在理解级联cascade和i ... -
持久层开发,基于lucene,hibernate-search
2011-10-17 15:19 18151、pojo类编写 import javax.pers ... -
spring和hibernate集成,基于注解的配置
2011-10-17 15:17 1119<?xml version="1.0&q ...
相关推荐
4. **部署服务**:将这个配置集成到你的Web应用中,启动服务器,REST服务就在`http://yourserver:port/context/rest/hello`路径下对外提供服务了。 **CXF REST客户端调用** 1. **创建客户端代理**:CXF提供了JAX-RS...
通过这些核心组件,开发者可以定义资源类,使用注解如`@Path`, `@GET`, `@POST`等来创建REST接口,利用CXF提供的自动绑定和转换功能,轻松处理HTTP请求和响应。同时,为了测试和调试,还可以使用CXF的内置服务器和...
【标题】"java cxf规范rest"涉及到的是Java开发中使用Apache CXF框架实现RESTful服务的相关技术。CXF是一个开源的服务框架,它允许开发者创建和消费各种Web服务,包括基于JAX-WS和JAX-RS的标准。REST...
在这个项目中,开发者可以学习到如何利用CXF作为服务端的REST服务提供者,以及Spring如何帮助管理和配置这些服务。 Apache CXF是一个开源的Java框架,它提供了创建Web服务的能力,包括SOAP和RESTful服务。CXF支持...
通过 CXF 开发 REST 服务,开发者可以利用 JAX-RS 规范的注解轻松定义接口,结合 Spring 提供的便捷管理,实现高效且可扩展的 RESTful Web 服务。CXF 不仅支持 REST,还支持 SOAP 和其他多种通信协议,使其成为构建...
10. **异常处理**:通过自定义异常处理器,我们可以规范化REST服务的错误响应,提供统一的错误信息格式。 通过这个“Spring CXF Restful实例”,开发者将学习到如何在Spring环境中使用CXF构建高效、可维护的RESTful...
下面我们将通过一个简单的例子来展示如何使用CXF来暴露REST服务。 ##### 定义REST服务接口 首先,我们需要定义一个REST服务接口: ```java import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs....
CXF提供了强大的工具和API,简化了REST服务的实现过程。 二、CXF REST服务的创建 1. 定义资源类:创建Java类,定义服务接口,使用JAX-RS注解(如`@Path`,`@GET`,`@POST`等)来标识资源路径和操作。 2. 创建服务...
在Spring中,CXF可以与Spring MVC结合,提供基于HTTP的Web服务,或者通过JAX-WS和JAX-RS标准来创建服务端点。CXF的使用使得服务的开发、部署和测试变得更加便捷。 【REST】 REST(Representational State Transfer...
通过Spring的管理能力,我们可以轻松地实现服务的依赖注入,同时利用CXF的JAX-RS功能来构建RESTful API。这种组合为现代微服务架构提供了坚实的基础。在实际项目中,还可以进一步配置CXF以支持更多高级功能,如安全...
【标题】:“CXF REST Web服务” 在Java世界中,Apache CXF是一个广泛使用的开源框架,用于构建和消费Web服务,包括RESTful服务。REST(Representational State Transfer)是一种轻量级的架构风格,用于设计网络...
在IT行业中,构建RESTful Web服务是常见的任务,它提供了轻量级、可扩展的通信方式。本示例将详细讲解如何使用Spring、Apache CXF和Maven来创建一个基于REST的WebService服务端Demo。 首先,让我们理解这些关键组件...
本文将详细探讨如何使用CXF 2.6版本与Spring框架结合,来提供REST服务并输出XML或JSON格式的数据。 首先,我们需要理解CXF的核心概念。CXF全称是Camel eXtended for Web Services,它提供了全面的Web服务实现,包括...
- 在Spring配置中启用CXF的Bus,通过`<jaxrs:server>`标签定义REST服务的位置和实现。 2. **定义REST服务**: - 使用JAX-RS(Java API for RESTful Web Services)注解来声明REST资源。例如,用`@Path`定义URL...
本项目“cxf+spring发布webservice和restservice”专注于利用Apache CXF框架与Spring框架结合,实现这两种服务的发布。Apache CXF是一个开源的、功能丰富的服务栈,它使得开发者能够轻松地构建和部署SOAP和RESTful ...
CXF REST最简实例是一个快速入门的教程,它展示了如何使用Apache CXF框架创建RESTful Web服务并进行测试。Apache CXF是一个流行的开源框架,它允许开发者构建和消费Web服务,包括SOAP和REST风格的服务。REST...
CXF发布的REST服务返回JSON格式数据,只有服务端代码,没有客户端代码,可以通过http://localhost:9999/roomservice/room、http://localhost:9999/roomservice/room/001来访问测试数据。
同时,CXF提供了很多工具和插件,如CXF的WS-Security、WS-I兼容性测试等,这些工具可以辅助开发和调试REST服务。 在【压缩包子文件的文件名称列表】中,`src`通常是源代码目录,包含了项目的所有Java源文件、资源...
【正文】 在IT行业中,开发RESTful服务是构建现代Web应用程序的关键部分,它提供了一种轻量级、灵活且...在实际开发中,你还可以利用CXF提供的高级特性,如拦截器、安全性、数据绑定等,来扩展和优化你的REST服务。
发布CXF+Spring整合的REST的服务接口完整实例,其中包括数据库连接池,json数据格式传递数据,HttpURLConne的get和post方式调用接口,以及获取访问者ip地址工具类等众多的技术实例。