首先需要了解下什么是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()方法,那么将返回: