Spring4.0 RestController Rest风格请求参数详解
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. 表单参数参数
注意,
- 这种方式传参数不能设置参数选填
- 注意,参数写在boby中,相当于表单参数,必须设置请求头为:application/x-www-form-urlencoded
- 若参数不正确,是无法进入控制器的。
/** 方法说明:使用表单方式提交数据* 请求参数: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. 文件流参数
单个文件通过这种方式 @RequestParam(“file”) MultipartFile file获得,这里是简单的写法,相当于 MultipartFile file = ((MultipartHttpServletRequest) request).getFile(“file”); 多个文件使用@RequestParam(“files”) MultipartFile[] files)
- 表单中文件的name属性必须设置file(注意,不是文件名),例如,html中
- 这个是简单获取文件的方式,若不知道表单中文件的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使用不同类型的参数接收方式。每个人有不同的习惯,我的习惯是:
- 一般获取内容,不涉及加密的用get方法,设计加密的用post
- 提交内容,例如添加,删除,修改,使用post、delete、put方法
- 通过主键获取内容的,我习惯用url参数,例如:/news/details/1,参数不是很多,组合起来有意义的也会用url路径组合,例如前面的日期:/demo/searchListByDate/2-10
- 有时候接收参数组合起来用比较好,有的内容通过url参数,有的部分用表单内容。
- 所有的设计接收参数的原则就是,然你的api的url能读通,看起来合理。
Spring4.0 RestController Rest风格请求参数详解相关推荐
- SpringBoot - 获取Get请求参数详解(附样例:非空、默认值、数组、对象)
利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数.下面演示 Controller 如何接收以 GET 方式传递过来的参数. 一.参数直接在路径中 (1)假设 ...
- SpringBoot 获取 Get 请求参数详解
叙述 利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数. 下面演示 Controller 如何接收以 GET 方式传递过来的参数. 解决方案 参数直接在路径 ...
- postman请求参数详解
1. Authorization 身份验证,主要用来填写用户名密码,以及一些验签字段,postman有一个helpers可以帮助我们简化一些重复和复杂的任务.当前的一套helpers可以帮助你解决一些 ...
- SpringBoot - 获取Get请求参数详解
利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数.下面演示 Controller 如何接收以 GET 方式传递过来的参数. 一.直接在请求路径中 (1).假 ...
- ajax的请求参数详解以及前后台交互详解
function rejectSub(){//从隐藏域中拿到userIDvar userId = $("input:hidden[name='userId']").val();va ...
- Http请求参数详解
http请求参数之Query String Parameters.Form Data.Request Payload HTTP请求中不同的请求方式和设置不同的Content-Type时,参数传递的方式 ...
- Web框架——Flask系列之request请求参数详解(十一)
一.request参数 request 就是flask中代表当前请求的 request 对象,其中一个请求上下文变量(理解成全局变量,在视图函数中直接使用可以取到当前本次请求) from flask ...
- log nginx 客户端请求大小_Nginx日志分析和参数详解
本文档主要介绍Nginx设置日志参数的作用,以及Nginx日志常用分析命令 基本大纲: 1.Nginx日志记录格式的介绍 2.Nginx日志参数详解 3.Web服务流量名词介绍 4.Nginx日志常用 ...
- PHP curl 参数详解
PHP curl参数详解,分享一下. curl_setopt (PHP 4 >= 4.0.2) curl_setopt -- 为CURL调用设置一个选项 描述 bool curl_setopt ...
最新文章
- 《游戏设计师修炼之道:数据驱动的游戏设计》一2.8小结
- datatable与SqlDataReader
- 扩展和修改 Enterprise Library 缓存应用程序块
- MaxCompute实践分析
- 查看windosw服务器序列号,型号
- 限时秒杀┃秒杀90%的玩具,让孩子爱上科学的彩虹实验2来了!
- mysql+误操作怎么恢复_Mysql误操作恢复流程
- 【转载保存】java 23种设计模式 深入理解
- 新萝卜家园win11全新专业版64位系统v2021.07
- 解决Mybatis的配置文件标签属性自动提示
- python中int的用法归类
- 程序员面试金典——9.2机器人走方格
- 树的孩子链表表示法可执行代码(创建,层次遍历)
- C++字符串输入输出操作
- 搭建自己的BT下载平台服务器
- 聊一聊DNS劫持那些事
- li-poly_GitHub - kinglisky/lowpoly: low poly图片风格化工具
- LabwindowsCVI 串口编程及事例
- python agg函数_dataframe转化(二)之 apply(),transform(),agg() 的用法和区别
- 毕业论文是手写还是计算机,毕业论文一般是手写还是打印?