共计 1826 个字符,预计需要花费 5 分钟才能阅读完成。
背景剖析
传统 java web 利用, 例如在 servlet 中获取申请数据, 咱们可能间接 HttpServletRequest
对象获取申请中的 url, 参数等相干信息 (request.getParameter(“…”)). 当然咱们
获取到这些参数当前, 咱们可能还要进行参数的解析, 类型的转换等等.
思考:
第一: 如果咱们在一个传统的 servlet 利用中, 向服务端发送了一个这样的申请, 例如 http://localhost/findObjects?pageCurrent=1
此时服务端要获取申请中的 pageCurrent 的值, 并赋值给你整数变量你会怎么做?
`String page=request.getParameter("pageCurrent");
if(page!=null&&"".equals(page)){Integer pageCurrent=Integer.parseInt(page);
}`
第二: 如果咱们在一个传统的 servlet 利用中, 向服务端发送了一个这样的申请, 例如 http://localhost/deleteObjects?ids=1,2,3,4,5
此时服务端要获取申请中的 ids 值, 而后将这个 ids 字符串中多个 id 值存储一个整数数组, 你会怎么做?
String idsStr=request.getParameter("ids");
String []idArray=idsStr.split(",");
Integer []ids=new Integer[idArray.length];
for(int i=0;i<idArray.length;i++){ids[i]=Integer.parseInt(idArray[i]);
}
第三: 如果咱们在一个传统的 servlet 利用中, 向服务端发送了一个这样的申请, 例如 http://localhost/saveObject?id=10&name=20&remark=30
此时服务端获取了申请数据当前, 要将申请数据存储到 Goods 对象中, 你会怎么做呢?
String id=request.getParameter("id");
String name=request.getParameter("name");
String remark=request.getParameter("remark");
Goods g=new Goods();
g.setId(Integer.parseInt(id));
g.setName(name);
g.setRemark(remark)
对于如上几种申请参数获取, 解析, 封装. 这样的过程, 在咱们的程序中可能会
重复呈现, 可能对如上重复执行的逻辑或模板性的代码进行简化, 进而进步
开发效率?
1)间接量形式(八种根本数据类型或者封装类, 字符串类型, 日期类型, 数组)
2)pojo 对象形式(要求 pojo 对象中提供与申请参数匹配的 set 办法)
3)map 对象形式(须要应用指定注解办法中 map 类型参数进行形容)
4)Rest 格调的 url 中的参数.
1)Spring MVC 管制层办法中的参数值都来自于哪个对象?request
2)Spring MVC 管制层办法参数中罕用注解你晓得有几个呢?
2.1)@RequestParam (定义参数规定, 例如参数是否可选, 指定获取哪个参数的值)
2.2)@DateTimeFormat (定义能够获取的日期的日期格局)
2.3)@RequestBody(示意参数能够接管客户端 post 申请提交的 json 原生数据)
2.4)@PathVariable(示意参数的值来自 url 中 {} 表达式中的数据)3)Spring MVC 管制办法上定义申请形式, 申请 url 的注解你理解的有哪些?
3.1)@RequestMapping(value=”/doGet”,method=RequestMethod.GET)
3.2)@GetMapping(“/path”) 个别利用于查问数据的申请形式定义
3.3)@PostMapping(“/path”) 个别利用于增加数据的申请形式定义
3.4)@DeleteMapping(“/path”) 个别利用于删除数据的申请形式定义
3.5)@PutMapping(“/path”) 个别利用于更新数据的申请形式定义
BUG?
1)400 (客户端向服务端传递的申请参数与服务端可解决的模式不匹配)
2)405 (客户端申请形式与服务端定义的申请解决形式不匹配)
3)404 (客户端申请的资源不存在)