使用Spring与CXF编写rest服务
2016-10-10 09:32
323 查看
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 c689 @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>
相关文章推荐
- 使用CXF和spring发布rest服务
- 使用cxf发布rest服务接口,和spring的整合
- 使用 Spring + CXF 发布 REST 服务
- 使用 Spring + CXF 发布 REST 服务(jax-RS)
- Spring 集成CXF框架发布Webservice服务 和 使用jdk生成Webservice clinet
- 1 使用 CXF 和 Spring 创建 Web 服务
- Web Service 那点事儿(4)—— 使用 CXF 开发 REST 服务
- 使用 CXF 开发 REST 服务
- Webservice的cxf开发_使用spring发布服务+ajax调用服务
- 使用CXF和spring搭建webService服务
- 使用 Spring RestTemplate 调用 rest 服务时自定义请求头(custom HTTP headers)
- 使用 Spring HATEOAS 开发 REST 服务
- CXF+Spring+REST发布webservice服务
- 使用 Spring HATEOAS 开发 REST 服务
- 使用RestTemplate消费spring boot的Restful服务
- Web Service 那点事儿(4)—— 使用 CXF 开发 REST 服务
- 使用CXF暴露您的REST服务
- WebService学习笔记-使用CXF编写基于Spring的Webservice
- 使用CXF和Spring发布Soap服务
- 微服务框架Spring Cloud介绍 Part4: 使用Eureka, Ribbon, Feign实现REST服务客户端