Controller, RestController简要说明

1. Controller, RestController的共同点

都是用来表示Spring某个类的是否可以接收HTTP请求

2.  Controller, RestController的不同点

@Controller标识一个Spring类是Spring MVC controller处理器

@RestController:  a convenience annotation that does nothing more than adding the@Controller and @ResponseBody annotations。  @RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用。

RestController  Rest风格接收参数使用说明:

1.无参数,设置RestController请求路径

2.查询字符串参数,可选和必选参数

3.json参数,RestController用实体类型接受

4.路径参数

5.body参数

6.文件流参数

1 无参数,设置RestController请求路径

下面是一个例子,例子无请求参数,通过@RequestMapping设置了请求的路由路径和请求方法。路由路由由类的mapping和方法的mapping组成,在后面的例子中,我就不再写出RestApiRequestDemoController类的mapping了。记住,url里面有个demo在前面。

@RestController
@RequestMapping("/demo")
public class RestApiRequestDemoController {///方法说明: 普通查询///示例请求:http://localhost:8091/demo/list@RequestMapping(value="/searchList",method = RequestMethod.POST)@ResponseBodypublic List<UserModel> searchList() {List list = new list();return list;}
}

2 查询字符串参数,可选和必选参数2. 查询字符串参数,可选和必选参数

下面是使用查询字符串的例子,required可以设置请求的字符串是否必填

///方法说明:url参数的使用-查询字符串 ,且name必填
///示例请求:http://localhost:8091/demo/searchListByName?name=liuyanwei
@RequestMapping(value="/listByName",method = RequestMethod.POST)
@ResponseBody
public List<TbUserModel> searchList(@RequestParam(value="name",required = true) String name) {Session context = DatabaseHelper.context();String sql = "select * from tb_user where name ='"+ name+"'" ;List list = context.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(TbUserModel.class)).list();return list;}

3 json参数,RestController用实体类型接受

注意,需要设置application/json 否则数据库会返回。hibernate操作数据库代码暂时可以不用去管他。

/*
* 方法说明:添加数据
* 1:使用json数据提交,直接使用实体对象接收
* 2:hibernate 添加数据
* 请求参数: {"id":1,"userId":1,"pwd":"123","name":"123","pwd":"123","headPortait":"123","isEnable":"123","createDate":"2015-05-12","lastLogin":"2015-05-12"}
* 请求头:Content-Type : application/json
* 请求ur:http://localhost:8091/demo/addUser
* */
@RequestMapping(value="/addUser",method = RequestMethod.POST)
@ResponseBody
public TbUserModel addUser(@RequestBody TbUserModel user) {Session context = DatabaseHelper.context();Transaction tran = context.beginTransaction();context.save(user);tran.commit();user.setId(user.getId());context.close();return user;}

4 路径参数

路径参数不能设置是否必填,全部都是必须填,不能省略的

///方法说明:url参数的使用
///示例请求:http://localhost:8091/demo/searchListById/2
@RequestMapping(value="/searchListById/{id}",method = RequestMethod.POST)
@ResponseBody
public List<TbUserModel> searchList(@PathVariable("id") int id) {Session context = DatabaseHelper.context();//        String sql = "select * from tb_user where id ="+ id ;String sql = "select * from tb_user where tb_user.id = :id";System.out.println(sql);List list = context.createSQLQuery(sql).setInteger("id", id).setResultTransformer(Transformers.aliasToBean(TbUserModel.class)).list();return list;}

高级用法:路径参数可以自由设置自己的规则,比如,你有个请求需要两个参数,月和日,你可以写成{month}-{day}

///方法说明:url参数的使用
///示例请求:http://localhost:8091/demo/searchListByDate/2-10
@RequestMapping(value="/searchListByDate/{month}-{day}",method = RequestMethod.POST)
@ResponseBody
public List<TbUserModel> searchList(@PathVariable("month") int month,@PathVariable("day") int day) {}

5. 表单参数参数

注意,

  1. 这种方式传参数不能设置参数选填
  2. 注意,参数写在boby中,相当于表单参数,必须设置请求头为:application/x-www-form-urlencoded
  3. 若参数不正确,是无法进入控制器的。
    /** 方法说明:使用表单方式提交数据* 请求参数:isEnable=1&name=cool* 配置* 请求头:Content-Type : application/x-www-form-urlencoded* 请求url:http://localhost:8091/demo/findUsersByName* */@RequestMapping(value="/findUsersByName",method = RequestMethod.POST)@ResponseBodypublic void findUsersByName(boolean isEnable , String name){System.out.println(isEnable);System.out.println(name);}

6. 文件流参数

  1. 单个文件通过这种方式 @RequestParam(“file”) MultipartFile file获得,这里是简单的写法,相当于 MultipartFile file = ((MultipartHttpServletRequest) request).getFile(“file”); 多个文件使用@RequestParam(“files”) MultipartFile[] files)

  2. 表单中文件的name属性必须设置file(注意,不是文件名),例如,html中
  3. 这个是简单获取文件的方式,若不知道表单中文件的name属性,可以通过request获取文件

例子:

@RequestMapping("upload")
public Resp upload(HttpServletRequest request,HttpServletResponse response, @RequestParam("file") MultipartFile file){try {//MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;String filePath = FilesService.uploadFile(file, request);return Resp.succeedResp(filePath);}catch (Exception e){e.printStackTrace();}return Resp.failureResp("图片上传失败");
}@RequestMapping("batchUpload")
public Resp batchUpload(HttpServletRequest request,HttpServletResponse response,@RequestParam("files") MultipartFile[] files) throws IOException {List<String> list = new ArrayList<String>();try {for (MultipartFile file :files) {String filePath = FilesService.uploadFile(file, request);list.add(filePath);System.out.println("filePath:" + filePath);}return Resp.succeedResp(list);}catch (Exception e){e.printStackTrace();}return  Resp.failureResp("文件上传失败");
}

总结

想要把Rest风格的api用好,合理利用参数是必须的。不同功能的api使用不同类型的参数接收方式。每个人有不同的习惯,我的习惯是:

  1. 一般获取内容,不涉及加密的用get方法,设计加密的用post
  2. 提交内容,例如添加,删除,修改,使用post、delete、put方法
  3. 通过主键获取内容的,我习惯用url参数,例如:/news/details/1,参数不是很多,组合起来有意义的也会用url路径组合,例如前面的日期:/demo/searchListByDate/2-10
  4. 有时候接收参数组合起来用比较好,有的内容通过url参数,有的部分用表单内容。
  5. 所有的设计接收参数的原则就是,然你的api的url能读通,看起来合理。

Spring4.0 RestController Rest风格请求参数详解相关推荐

  1. SpringBoot - 获取Get请求参数详解(附样例:非空、默认值、数组、对象)

    利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数.下面演示 Controller 如何接收以 GET 方式传递过来的参数. 一.参数直接在路径中 (1)假设 ...

  2. SpringBoot 获取 Get 请求参数详解

    叙述 利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数. 下面演示 Controller 如何接收以 GET 方式传递过来的参数. 解决方案 参数直接在路径 ...

  3. postman请求参数详解

    1. Authorization 身份验证,主要用来填写用户名密码,以及一些验签字段,postman有一个helpers可以帮助我们简化一些重复和复杂的任务.当前的一套helpers可以帮助你解决一些 ...

  4. SpringBoot - 获取Get请求参数详解

    利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数.下面演示 Controller 如何接收以 GET 方式传递过来的参数. 一.直接在请求路径中 (1).假 ...

  5. ajax的请求参数详解以及前后台交互详解

    function rejectSub(){//从隐藏域中拿到userIDvar userId = $("input:hidden[name='userId']").val();va ...

  6. Http请求参数详解

    http请求参数之Query String Parameters.Form Data.Request Payload HTTP请求中不同的请求方式和设置不同的Content-Type时,参数传递的方式 ...

  7. Web框架——Flask系列之request请求参数详解(十一)

    一.request参数 request 就是flask中代表当前请求的 request 对象,其中一个请求上下文变量(理解成全局变量,在视图函数中直接使用可以取到当前本次请求) from flask ...

  8. log nginx 客户端请求大小_Nginx日志分析和参数详解

    本文档主要介绍Nginx设置日志参数的作用,以及Nginx日志常用分析命令 基本大纲: 1.Nginx日志记录格式的介绍 2.Nginx日志参数详解 3.Web服务流量名词介绍 4.Nginx日志常用 ...

  9. PHP curl 参数详解

    PHP curl参数详解,分享一下. curl_setopt (PHP 4 >= 4.0.2) curl_setopt -- 为CURL调用设置一个选项 描述 bool curl_setopt ...

最新文章

  1. 《游戏设计师修炼之道:数据驱动的游戏设计》一2.8小结
  2. datatable与SqlDataReader
  3. 扩展和修改 Enterprise Library 缓存应用程序块
  4. MaxCompute实践分析
  5. 查看windosw服务器序列号,型号
  6. 限时秒杀┃秒杀90%的玩具,让孩子爱上科学的彩虹实验2来了!
  7. mysql+误操作怎么恢复_Mysql误操作恢复流程
  8. 【转载保存】java 23种设计模式 深入理解
  9. 新萝卜家园win11全新专业版64位系统v2021.07
  10. 解决Mybatis的配置文件标签属性自动提示
  11. python中int的用法归类
  12. 程序员面试金典——9.2机器人走方格
  13. 树的孩子链表表示法可执行代码(创建,层次遍历)
  14. C++字符串输入输出操作
  15. 搭建自己的BT下载平台服务器
  16. 聊一聊DNS劫持那些事
  17. li-poly_GitHub - kinglisky/lowpoly: low poly图片风格化工具
  18. LabwindowsCVI 串口编程及事例
  19. python agg函数_dataframe转化(二)之 apply(),transform(),agg() 的用法和区别
  20. 毕业论文是手写还是计算机,毕业论文一般是手写还是打印?

热门文章

  1. 基于投影算法实现电表读数识别的Matlab程序
  2. Windows上的3个快捷键
  3. Windows Mobile开发总结 01
  4. ZFPlayer实现后台播放
  5. Spring refresh 方法分析之一
  6. 唯快不破:开源网络库的分析libevent muduo nginx
  7. qduoj 基础算法测验1
  8. slf4j-log4j12版本问题导致的NullPointerException
  9. word中的表格里面的字体居中
  10. 数云原生·场景融合|神州数码第四届数字中国技术年会正式开幕