使用Spring与CXF编写rest服务
来源:互联网 发布:极点输入法 mac版 编辑:程序博客网 时间:2024/06/03 10:01
CXF与Rest服务
REST 是英文 Representational State Transfer 的缩写,有中文翻译为“具象状态传输”。REST 这个术语是由 Roy Fielding 在他的博士论文 《 Architectural Styles and the Design of Network-based Software Architectures 》中提出的。REST 并非标准,而是一种开发 Web 应用的架构风格,可以将其理解为一种设计模式。REST 基于 HTTP,URI,以及 XML 这些现有的广泛流行的协议和标准,伴随着 REST,HTTP 协议得到了更加正确的使用。 基于 REST 的 Web 服务遵循一些基本的设计原则:
- 系统中的每一个对象或是资源都可以通过一个唯一的 URI 来进行寻址,URI 的结构应该简单、可预测且易于理解,比如定义目录结构式的URI。
- 以遵循 RFC-2616 所定义的协议的方式显式地使用 HTTP 方法,建立创建、检索、更新和删除(CRUD:Create,Retrieve, Update and Delete)操作与 HTTP 方法之间的一对一映射:
- 若要在服务器上创建资源,应该使用 POST 方法;
- 若要检索某个资源,应该使用 GET 方法;
- 若要更改资源状态或对其进行更新,应该使用 PUT 方法;
- 若要删除某个资源,应该使用 DELETE 方法。
例如:
GET /zoos:列出所有动物园POST /zoos:新建一个动物园GET /zoos/ID:获取某个指定动物园的信息PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)DELETE /zoos/ID:删除某个动物园GET /zoos/ID/animals:列出某个指定动物园的所有动物DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
1.在web.xml中添加cxfservlert
<servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping>
2.在编写service接口
package com.webservice.service;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.jws.WebParam;import javax.ws.rs.Consumes;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.Produces;import javax.ws.rs.core.MediaType;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.webpos.dao1.WpStoreItemMapper;import com.webpos.vo.WpStoreItem;import com.webpos.vo.WpStoreItemExample;import com.webservice.dao.QueryStoreItemDao;import com.webservice.vo.RetStoreItem;//广易付 PC端商品添加修改查询 rest接口@Path("/")@Service("restStoreItemServer")public class RestStoreItem { @Autowired private QueryStoreItemDao storeItemDao; @Autowired private WpStoreItemMapper storeItemMapper; @GET @Path("storeItem") @Produces({MediaType.APPLICATION_JSON})//返回的mime类型 @Consumes({MediaType.APPLICATION_JSON})//接受请求的mime类型 public RetStoreItem storeItem(){ List<Map<String, Object>> retList = new ArrayList<>(); List<WpStoreItem> list = storeItemDao.queryStoreItemParent(); if(list != null && list.size()>0){ for(int i = 0;i<list.size();i++){ long id = list.get(i).getId(); List<WpStoreItem> listItem = storeItemDao.queryStoreItem(id); Map<String, Object> map = new HashMap<>(); map.put("parent", list.get(i).getItemName()); map.put("value", listItem); retList.add(map); } } RetStoreItem ret = new RetStoreItem(); ret.setList(retList); ret.setFlag("success"); return ret; } @POST @Path("/storeItem") @Produces({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON}) public RetStoreItem addStoreItem(WpStoreItem item){ RetStoreItem ret = new RetStoreItem(); if(item != null){ if(item.getItemId() == null || item.getItemId().equals("")){ ret.setFlag("添加失败,商品编号不能为空"); return ret; } if(item.getItemName() == null || item.getItemName().equals("")){ ret.setFlag("添加失败,商品名称不能为空"); return ret; } if(item.getParentId() == null || item.getParentId().equals("")){ ret.setFlag("添加失败,商品种类不能为空"); return ret; } if(item.getItemPrice() == null || item.getItemPrice().equals("")){ ret.setFlag("添加失败,商品价格不能为空"); return ret; } storeItemMapper.insertSelective(item); ret.setFlag("success"); return ret; } ret.setFlag("添加失败,商品信息不能为空"); return ret; } @GET @Path("/storeItem/{id}") @Produces({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON}) public RetStoreItem getStoreItemById(@PathParam("id") Long itemid){ RetStoreItem ret = new RetStoreItem(); if(itemid != null){ WpStoreItemExample example = new WpStoreItemExample(); example.clear(); example.createCriteria().andIdEqualTo(itemid); List<WpStoreItem> list = storeItemMapper.selectByExample(example); List<Map<String, Object>> list1 = new ArrayList<>(); Map<String, Object> map = new HashMap<>(); map.put("value", list); list1.add(map); ret.setList(list1); ret.setFlag("success"); }else{ ret.setFlag("修改失败,商品ID不能为空"); } return ret; } @PUT @Path("/storeItem/{id}") @Produces({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON}) public RetStoreItem updateStoreItemById(@PathParam("id") Long itemid,@WebParam(name="WpStoreItem") WpStoreItem item){ RetStoreItem ret = new RetStoreItem(); if(itemid != null && item != null){ WpStoreItemExample example = new WpStoreItemExample(); example.clear(); example.createCriteria().andIdEqualTo(itemid); storeItemMapper.updateByExampleSelective(item, example); ret.setFlag("success"); }else{ ret.setFlag("修改失败,商品ID或者商品详情不能为空"); } return ret; }}
3.在Spring-context中添加bean-server
<jaxrs:server id="restServer" address="/rest"> <jaxrs:providers><!-- 提供json转Obejct Object需要添加注解@xmlRootElement--> <bean id="jacksonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" /> </jaxrs:providers> <jaxrs:serviceBeans> <ref bean="restStoreItemServer" /> </jaxrs:serviceBeans> </jaxrs:server>
0 0
- 使用Spring与CXF编写rest服务
- 使用CXF和spring发布rest服务
- 使用cxf发布rest服务接口,和spring的整合
- 使用 CXF 开发 REST 服务
- 使用cxf开发REST服务
- 使用 CXF 开发 REST 服务
- 使用 CXF 开发 REST 服务
- CXF系列之JAX-RS:CXF与spring集成发布REST服务
- CXF与REST服务实际开发
- 使用CXF暴露您的REST服务
- 8、CXF与Spring整合发布http rest 风格的WebService服务
- apache-cxf-3.0.4和spring实现rest服务
- webservice--CXF+Spring整合发布REST的服务
- Spring整合CXF开发基于rest的服务
- WebService之CXF整合Spring框架发布REST服务
- 整合spring与cxf,利用cxf编写webservice
- 整合spring与cxf,利用cxf编写webservice
- CXF与Spring整合开发WebService服务
- 防止按钮短时间内重复点击
- c++中容器总结
- 压缩技术
- 本机连接局域网不同网段,设置方法
- 基于QNX的Testbed单元测试环境配置过程
- 使用Spring与CXF编写rest服务
- 【牛腩新闻发布系统】知识点总结
- myeclipse10下 Java compiler level does not match解决方法
- Android安全攻防战,反编译与混淆技术完全解析(上)
- iOS中文网址路径转换URLEncode (二)
- Python 正则表达式(Google Python Course)
- 深度学习:keras 学习笔记
- RN-reactNative视频0-50集
- Linux驱动--字符设备驱动实例