SSM开发框架之SpringMVC(二)

863 阅读3分钟
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

俗话说:温故而知新,学习SSM框架也有一段时间了,在开发项目的时候虽然处于会用的程度,但是对于这个框架的理解仍然不够深刻,因此进行一个复习,加深自己对于SSM框架的理解,同时我也会尽量将这些基础点以我自身的理解写出来,希望能对大家有所帮助

SpringMVC中的请求与响应

接收请求,获得请求参数

SpringMVC可以接收客户端发送过来的如下类型的数据

  • 基本类型数据
  • POJO类型数据
  • 数组类型数据
  • 集合类型数据

获取请求中的基本类型数据

前提:Controller中的业务方法的参数名称要与请求参数的name一致,SpringMVC会自动为使用者映射匹配

如:地址栏中带有请求参数username和age image.png

则对应的业务方法的参数列表中的参数名要与请求参数对应

image.png

获取请求中的POJO类型参数

只要Controller中的业务方法中接收的POJO参数的成员属性名与请求参数的name一致,参数会进行自动映射匹配

image.png

获得数组类型参数

Controller中的业务方法的数组名称与请求参数中的数组名称相同即可,参数值会进行自动的映射匹配

image.png

获得集合类型参数

当使用ajax提交请求时,可以指定contentType为json格式,那么在Controller的参数列表位置使用@RequestBody就可以直接接收集合数据

前端发送ajax请求

$.ajax({
    type:"POST,
    url:"${pageContext.request.contextPath}/user/quick15",
    data:JSON.stringify(userList),
    contentType:"application/json;charset=utf-8"
});

在Controller的业务方法中使用@RequestBody注解接收前端发送过来的集合类型的JSON字符串

RequestMapping(value="/quick15")
@ResponseBody
public void save15(@RequestBody List<User> userList){
    ...
}

以上获取请求的方式中,都有一个共同点:请求中的参数名称与Controller中业务方法的参数名称相同,那么如果遇到了请求中的参数名称需要与Controller中业务方法的参数名称不相同的情况呢

参数绑定注解@RequestParam

当请求中的参数名称与Controller业务方法中参数名称不一致时,就需要通过@RequestParam注解进行参数的绑定

具体情况如下:

image.png

使用@RequestParam进行参数的绑定

@RequestMapping("/quick14")
@ResponseBody
public void queickMethod14(@RequestParam("name") String username){
    ...
}

@RequestParam注解还有如下参数可以使用:

  • value(默认):请求参数名称
  • require:请求参数中是否必须包括此参数,默认为true,接收参数时若是没有此参数则报错
  • defaultValue:当没有指定请求参数时,使用指定的默认值赋值

获得Servlet的相关API

SpringMVC之哦吃使用原始ServletAPI对象作为Controller方法的参数进行注入,常用的对象如下:

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
@RequestMapping("/quick16")
@ResponseBody
public void quickMethod16(HttpServletRequest request,HttpServletResponse response,HttpSession session){
    //直接在参数列表注入即可
    ...
}

获取请求头信息————@RequestHeader

使用@RequestHeader可以获得请求头信息,相当于web阶段学习的request.getHeader(name) @RequestHeader注解的属性如下:

  • value:请求头名称
  • required:是否必须携带此请求头
@RequestMapping("/quick17")
@ResponseBody
public void quickMethod17(@RequestHeader(value = "User-Agent",required = false) String headerValue){
    ...
}

获取Cookie信息————@CookieValue

使用@CookieValue可以获得指定Cookie的值 @CookieValue注解的属性如下:

  • value:要获取的cookie的名称
  • required:是否必须携带此cookie
@RequestMapping("/quick18")
@ResponseBody
public void quickMethod18(@CookieValue(value = "JSESSIONID",required = false) String jsessionid){
    ...
}