参数利用SpringMVC构建REST接口:第七篇 控制层实现

改章节个人在深圳游玩的时候突然想到的...这两天就有想写几篇关于参数利用的文章,所以回家到之后就奋笔疾书的写出来发表了

        SpringMVC构建REST接口的控制层,是全部接口的最顶层,也就是直接暴露给用户。

        在这层,对调用者身份以及对传入的参数进行验证,以及返回参数的组织。

        我爱好对象,不爱好以一个个的参数,再说我们用jackjson自动进行对象实例和Json的转换,所以我们需要输入输出参数的对象集。  由于目前SpringMVC对控制层的方法参数不支持泛型,所以我们需要在com.jiahe.rest.demo2.requestmodels建立相对应的请求参数对象;而输出可以使用泛型。

    一、输入参数组织

       顺次在com.jiahe.rest.demo2.requestmodels建立接口请求的头部对象和DishesCook的请求对象。

        1、接口请求的头部对象Header

    public class Header   implements Serializable  {

    private static final long serialVersionUID = 1L;

    
private String ck; //赐与调用者的,根据项目制订标准

    private String v;//调用登岸接口后的返回值,根据项目制订标准

    

        ...ToAdd get/set                                               利用Eclipse出产各个属性的get\set

    

        ...ToAdd toString()                                          利用Eclipse出产实例的字符串转换

    

        ...ToAdd Constructors from super              利用Eclipse出产默许构造函数

    

        ...ToAdd Constructor use fields                  利用Eclipse出产全字段的构造函数

    }

         2、DishesCook的请求对象

    public class DishesCookReauest   implements Serializable {

        private static final long serialVersionUID = 1L;

    
private Header header;//讨情头

    private DishesCook dishesCook;//请求对象

    

        ...ToAdd get/set                                               利用Eclipse出产各个属性的get\set

    

        ...ToAdd toString()                                          利用Eclipse出产实例的字符串转换

    

        ...ToAdd Constructors from super              利用Eclipse出产默许构造函数

    

        ...ToAdd Constructor use fields                  利用Eclipse出产全字段的构造函数

    }

    二、输出参数组织

        输出的Json,我们采取{"data":"","message":"",status:0}格式,因此需要在com.jiahe.rest.demo2.responseModels建立一个对应的泛型对象。

    public class ResultData<T> implements Serializable {

    
        private static final long serialVersionUID = 1L;

private int status;//返回 0:失败;1:胜利

private T data;//具体的对象

private String message;//错误时消息

    

        ...ToAdd get/set                                               利用Eclipse出产各个属性的get\set

    

        ...ToAdd toString()                                          利用Eclipse出产实例的字符串转换

    

        ...ToAdd Constructors from super              利用Eclipse出产默许构造函数

    

        ...ToAdd Constructor use fields                  利用Eclipse出产全字段的构造函数

    }

    三、DishesCook控制层实现

        1、在package com.jiahe.rest.demo2.controller下添加类DishesCookController

         2、其余和《SpringMVC构建REST接口:第四篇 第一个REST风格的接口》基本雷同,下面是代码

    每日一道理
美丽是平凡的,平凡得让你感觉不到她的存在;美丽是平淡的,平淡得只剩下温馨的回忆;美丽又是平静的,平静得只有你费尽心思才能激起她的涟漪。
@Controller
@RequestMapping("/dishescook")
public class DishesCookController {
	
	@Autowired
	private DishesCookService dishesCookService;
	
	/**
     * add  增加一个DishesCook
     * http://localhost:8080/demo2/dishescook/add
	 * @param requestData
	 * @param mode
	 * @param response
	 * @return
	 * @throws IOException
	 */
	@RequestMapping(value = "/add", method = RequestMethod.POST)
	@ResponseBody
	public ResultData<DishesCook> add(@RequestBody DishesCookRequest requestData,
			Model mode, HttpServletResponse response) throws IOException {		
		ResultData<DishesCook> resultData =new ResultData<DishesCook>();
		resultData.setStatus(0);
		resultData.setData(null);
		if (requestData==null) {			
			resultData.setMessage("参数错误:没有传入参数");
		} else {			
			//身份验证处理
			try {
				int i=dishesCookService.insert(requestData.getDishesCook());
				if (i==1){
					resultData.setStatus(1);
					resultData.setMessage("添加胜利");
				} else {
					resultData.setMessage("添加失败");
				}
			} catch (Exception e) {
				resultData.setMessage("添加失败:"+e.getMessage());
			}			
		}
		return resultData;
	}
	
	/**
	 * update  修改一个DishesCook
     * http://localhost:8080/demo2/dishescook/update
	 * @param requestData
	 * @param mode
	 * @param response
	 * @return
	 * @throws IOException
	 */
	@RequestMapping(value = "/update", method = RequestMethod.POST)
	@ResponseBody
	public ResultData<DishesCook> update(@RequestBody DishesCookRequest requestData,
			Model mode, HttpServletResponse response) throws IOException {		
		ResultData<DishesCook> resultData =new ResultData<DishesCook>();
		resultData.setStatus(0);
		resultData.setData(null);
		if (requestData==null) {			
			resultData.setMessage("参数错误:没有传入参数");
		} else {			
			//身份验证处理
			try {
				int i=dishesCookService.update(requestData.getDishesCook());
				if (i==1){
					resultData.setStatus(1);
					resultData.setMessage("修改胜利");
				} else {
					resultData.setMessage("修改失败");
				}
			} catch (Exception e) {
				resultData.setMessage("修改失败:"+e.getMessage());
			}			
		}
		return resultData;
	}
	
	/**
     * deleteByID  删除一个DishesCook
     * http://localhost:8080/demo2/dishescook/deletebyid
	 * @param requestData
	 * @param mode
	 * @param response
	 * @return
	 * @throws IOException
	 */
	@RequestMapping(value = "/deletebyid", method = RequestMethod.POST)
	@ResponseBody
	public ResultData<DishesCook> deleteByID(@RequestBody DishesCookRequest requestData,
			Model mode, HttpServletResponse response) throws IOException {		
		ResultData<DishesCook> resultData =new ResultData<DishesCook>();
		resultData.setStatus(0);
		resultData.setData(null);
		if (requestData==null) {			
			resultData.setMessage("参数错误:没有传入参数");
		} else {			
			//身份验证处理
			try {
				int i=dishesCookService.deleteByID(requestData.getDishesCook());
				if (i==1){
					resultData.setStatus(1);
					resultData.setMessage("删除胜利");
				} else {
					resultData.setMessage("删除失败");
				}
			} catch (Exception e) {
				resultData.setMessage("删除失败:"+e.getMessage());
			}			
		}
		return resultData;
	}
	
	@RequestMapping(value = "/deletebycondition", method = RequestMethod.POST)
	@ResponseBody
	public ResultData<DishesCook> deleteByCondition(@RequestBody DishesCookRequest requestData,
			Model mode, HttpServletResponse response) throws IOException {		
		ResultData<DishesCook> resultData =new ResultData<DishesCook>();
		resultData.setStatus(0);
		resultData.setData(null);
		if (requestData==null) {			
			resultData.setMessage("参数错误:没有传入参数");
		} else {			
			//身份验证处理
			try {
				int i=dishesCookService.deleteByCondition(requestData.getDishesCook());
				if (i==1){
					resultData.setStatus(1);
					resultData.setMessage("删除胜利");
				} else {
					resultData.setMessage("删除失败");
				}
			} catch (Exception e) {
				resultData.setMessage("删除失败:"+e.getMessage());
			}			
		}
		return resultData;
	}
	
	@RequestMapping(value = "/findbyid", method = RequestMethod.POST)
	@ResponseBody
	public ResultData<DishesCook> findByID(@RequestBody DishesCookRequest requestData,
			Model mode, HttpServletResponse response) throws IOException {		
		ResultData<DishesCook> resultData =new ResultData<DishesCook>();
		resultData.setStatus(0);
		resultData.setData(null);
		if (requestData==null) {			
			resultData.setMessage("参数错误:没有传入参数");
		} else {			
			//身份验证处理
			try {
				DishesCook dishesCook =dishesCookService.findByID(requestData.getDishesCook());
				resultData.setStatus(1);
				resultData.setData(dishesCook);
			} catch (Exception e) {
				resultData.setMessage("查询失败:"+e.getMessage());
			}			
		}
		return resultData;
	}
	
	@RequestMapping(value = "/findbycondition", method = RequestMethod.POST)
	@ResponseBody
	public ResultData<List<DishesCook>> findByCondition(@RequestBody DishesCookRequest requestData,
			Model mode, HttpServletResponse response) throws IOException {		
		ResultData<List<DishesCook>> resultData =new ResultData<List<DishesCook>>();
		resultData.setStatus(0);
		resultData.setData(null);
		if (requestData==null) {			
			resultData.setMessage("参数错误:没有传入参数");
		} else {			
			//身份验证处理
			try {
				List<DishesCook> dishesCookList =dishesCookService.findByCondition(requestData.getDishesCook());
				resultData.setStatus(1);
				resultData.setData(dishesCookList);
			} catch (Exception e) {
				resultData.setMessage("查询失败:"+e.getMessage());
			}			
		}
		return resultData;
	}
	
	@RequestMapping(value = "/findcountbycondition", method = RequestMethod.POST)
	@ResponseBody
	public ResultData<Long> findCountByCondition(@RequestBody DishesCookRequest requestData,
			Model mode, HttpServletResponse response) throws IOException {		
		ResultData<Long> resultData =new ResultData<Long>();
		resultData.setStatus(0);
		resultData.setData(null);
		if (requestData==null) {			
			resultData.setMessage("参数错误:没有传入参数");
		} else {			
			//身份验证处理
			try {
				Long l =dishesCookService.findCountByCondition(requestData.getDishesCook());
				resultData.setStatus(1);
				resultData.setData(l);
			} catch (Exception e) {
				resultData.setMessage("查询失败:"+e.getMessage());
			}			
		}
		return resultData;
	}
}
身份验证处理,没有处理,有很多方法进行处理,根据项目情况实现它.
注意:1、每个action的请求方式都使用的method = RequestMethod.POST,是为了统一调用。
2、控制层,重要注意各种注解。
源代码:http://download.csdn.net/detail/lxhjh/5435319

文章结束给大家分享下程序员的一些笑话语录: 面试官:熟悉哪种语言
应聘者:JAVA
面试官:知道什么叫类么
应聘者:我这人实在,工作努力,不知道什么叫累
面试官:知道什么是包?
应聘者:我这人实在 平常不带包 也不用公司准备了
面试官:知道什么是接口吗?
应聘者:我这个人工作认真。从来不找借口偷懒
面试官:知道什么是继承么
应聘者:我是孤儿没什么可以继承的
面试官:知道什么叫对象么?
应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
面试官:知道多态么?
应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??

--------------------------------- 原创文章 By 参数和利用 ---------------------------------

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3095732.html