您的位置:首页 > 编程语言 > Java开发

使用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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: