背景分析
传统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
第三:假如我们在一个传统的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 (客户端请求的资源不存在)