项目应用:使用springmvc框架完成rest接口开发

首先需要了解下什么是rest接口。

 REST实际上是 一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
  主要实现的要求为类似:

  • /video/good/  HTTP GET =>    得到全部的good数据
  • /video/good /1  HTTP DELETE => 删除 id = 1的good数据
  • /video/good /1  HTTP PUT  =>   更新id = 1的good数据
  • /video/good   HTTP POST =>   新增good数据的接口:

    具体controller如下

    package com.xiaoma.universe.video.controller;
    
    import java.io.UnsupportedEncodingException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestHeader;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.alibaba.fastjson.JSONObject;
    import com.xiaoma.db.common.pagination.PageMyBatis;
    import com.xiaoma.universe.common.util.BaseModel;
    import com.xiaoma.universe.video.model.VideoGood;
    import com.xiaoma.universe.video.service.VideoGoodService;
     
    /**
     * @Title:Controller
     * @Description: TODO
     * @author langjun
     * @since 2016年07月28日
     * @version V1.0  
     */
    @Controller
    @RequestMapping("video/good")
    public class VideoGoodController extends BaseController{
    
    	@Autowired
    	private VideoGoodService videoGoodService;
    
    	/**
    	 * 查询全部课程商品对应关系(翻页)
    	 * @Title: queryall 
    	 * @Description: TODO
    	 * @param @param request
    	 * @param @param response
    	 * @param @param token
    	 * @param @param videoGood
    	 * @param @param model    设定文件 
    	 * @return void    返回类型 
    	 * @throws
    	 */
    	@RequestMapping(value="/" , method=RequestMethod.GET)
    	@ResponseBody
    	public void queryall(HttpServletRequest request, HttpServletResponse response , @RequestHeader String token,VideoGood videoGood, BaseModel model)
    	{
    		JSONObject json = new JSONObject();
    		String message = "";
    		try {
    			PageMyBatis<VideoGood> pages = videoGoodService.list(videoGood, model);
    			long totalPage = getTotalPage(model.getRows(), pages.getTotal());
    			
    			json.put("count", pages.getTotal());
    			json.put("result", pages);
    			json.put("pageNo", model.getPage());
    			json.put("totalPage", totalPage);
    			 if(model.getPage() > 1){
    				 json.put("previous", replaceValueReg(getRequestUrl(request),"page", String.valueOf((model.getPage() -1))));
    			 }else{
    				 json.put("previous","");
    			 }
    			 if(totalPage > model.getPage()){
    				 json.put("next", replaceValueReg(getRequestUrl(request),"page", String.valueOf((model.getPage() + 1))));
    			 }else{
    				 json.put("next","");
    			 }
    			
    			response.setStatus(HttpServletResponse.SC_OK);
    			message = "查询成功";
    
    		} catch (RuntimeException e) {
    			response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    			json.put("code","error" );
    			message = e.getMessage();
    		}catch (UnsupportedEncodingException e1) {
    			response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    			json.put("code","error" );
    			message = e1.getMessage();
    		}
    		 json.put("message", message);
    		 flushJson(json, response);
    	}
    	
    	/**
    	 * 根据主键增加或者更新
    	 * @Title: add 
    	 * @Description: TODO
    	 * @param @param request
    	 * @param @param response
    	 * @param @param token
    	 * @param @param videoGood    设定文件 
    	 * @return void    返回类型 
    	 * @throws
    	 */
    	@RequestMapping(value="/" , method=RequestMethod.POST)
    	@ResponseBody
    	public void add(HttpServletRequest request, HttpServletResponse response , @RequestHeader String token ,VideoGood videoGood)
    	{
    		JSONObject json = new JSONObject();
    		String message = "";
    		try {
    			videoGoodService.saveOrUpdate( videoGood);
    			response.setStatus(HttpServletResponse.SC_CREATED);
    			message = "插入成功";
    		} catch (RuntimeException e) {
    			response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    			message = e.getMessage();
    		}
    		json.put("message",message);
    		flushJson(json, response);
    	}
    
    	/**
    	 * 删除课程商品对应关系
    	 * @Title: delete 
    	 * @Description: TODO
    	 * @param @param request
    	 * @param @param response
    	 * @param @param token
    	 * @param @param id    设定文件 
    	 * @return void    返回类型 
    	 * @throws
    	 */
    	@RequestMapping(value="/{id}" , method=RequestMethod.DELETE)
    	@ResponseBody
    	public void delete(HttpServletRequest request, HttpServletResponse response , @RequestHeader String token,@PathVariable("id") Integer id )
    	{
    		JSONObject json = new JSONObject();
    		String message = "";
    		if(id==null||id<=0)
    		{
    			response.setStatus(HttpServletResponse.SC_NOT_FOUND);
    			json.put("message", "删除条件错误");
    			flushJson(json, response);
    		}
    		try {
    			videoGoodService.deleteResult(id);
    			response.setStatus(HttpServletResponse.SC_OK);
    			message = "删除成功";
    		} catch (RuntimeException e) {
    			response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    			message = e.getMessage();
    		}
    		json.put("message", message);
    		flushJson(json, response);
    	}
    	
    	/**
    	 * 根据主键增加或者更新
    	 * @Title: update 
    	 * @Description: TODO
    	 * @param @param request
    	 * @param @param response
    	 * @param @param token
    	 * @param @param videoGood    设定文件 
    	 * @return void    返回类型 
    	 * @throws
    	 */
    	@RequestMapping(value="/" , method=RequestMethod.PUT)
    	@ResponseBody
    	public void update(HttpServletRequest request, HttpServletResponse response , @RequestHeader String token ,VideoGood videoGood)
    	{
    		JSONObject json = new JSONObject();
    		String message = "";
    		try {
    			videoGoodService.saveOrUpdate( videoGood);
    			response.setStatus(HttpServletResponse.SC_OK);
    			message = "更新成功";
    		} catch (RuntimeException e) {
    			response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    			message = e.getMessage();
    		}
    		json.put("message",message);
    		flushJson(json, response);
    	}
    }
    

    如果想使用继承httpservlet类实现的方式可通过

    1.将service注入

    2.重载以下方法:

    •  doGet() :调用服务器的资源,并将其作为响应返回给客户端.doGet()调用在URL里显示正在传送给Servlet的数据,这在系统的安全方面可能带来一些问题,比如说,用户登录时,表单里的用户名和密码需要发送到服务器端,doGet()调用会在浏览器的URL里显示用户名和密码.
    • doPost() :它用于把客户端的数据传给服务端,使用它可以以隐藏方式给服务器端发送数据.Post适合发送大量数据.
    • doPut() :调用和doPost()相似,并且它允许客户端把真正的文件存放在服务器上,而不仅仅是传送数据.
    • doDelete() :它允许客户端删除服务器端的文件或者Web页面.它的使用非常少.
    • doHead() :它用于处理客户端的Head调用,并且返回一个response.当客户端只需要响应的Header时,它就发出一个Header请求.这种情况下客户端往往关心响应的长度和响应的MIME类型.
    • doOptions():它用于处理客户端的Options调用,通过这个调用,客户端可以获得此Servlet支持的方法.如果Servlet覆盖了doPost()方法,那么将返回:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值