SpringMVC

控制器Controller

  • 注解形式的Controller
  • @Controller声明一个类是控制器
  • @RequestMapping("")映射访问路径

入参绑定

  1. 简单类型
    当请求中的参数名和处理器中的形参名保持一致,这时会将请求参数和形参进行绑定。,表示从request请求中获取数据并绑定数据
    推荐使用包装类型,接受null值
    如果需要将不同名的参数进行绑定,可以使用如下注解
    @RequestParam(value=”请求中的参数名”)
    还有两个属性
    required:是否是必要的
    defaultValue:设置默认值,没有同名参数时,添加的默认值
@Controller
public class RequestParamController {
    @RequestMapping("/RP/t1")
    public String test1(@RequestParam(value = "name" ,defaultValue="Tom")String name, @RequestParam(value = "age",required)int age, Model model){
        String result = name + age;
        model.addAttribute("msg","name+age="+result);
        return "test";
    }
}
  1. 绑定pojo类型(bean)
    方法参数可以是pojo类型,在传递参数时要求请求中参数名和bean对象的属性名保持一致,这时可以自动映射。
    如果需要给传递回前端的对象修改名字,可以使用如下注解@ModelAttribute(“loginUser”) User user
  2. 绑定日期类型
    没有默认转换器,需要自定义转换类,并将转换器放入注解驱动中
    转换器接口
    Converter 重写convert()
  3. 数组和集合类型
    (1)数组
    简单类型 可以直接写成入参
    Javabean类型 不可以直接写成入参形式
    (2)集合
    简单类型
    Bean类型
    无论是简单类型还是bean类型,都不能直接定义成入参
    解决方式:
    将list定义在类中作为属性进行赋值

RestFul风格

访问形式:
http://localhost:9090/springmvc_01_controller_war_exploded//R/1/2

@Controller
public class RestFulController {
    //@GetMapping("/t1")= @RequestMapping(value="/test1",method=RequestMethod.GET)
    //约束请求类型
    @RequestMapping("/R/{a}/{b}")
    //使用  @PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上。
    public String test1(@PathVariable int a, @PathVariable int b, Model model){
        int result = a + b;
        model.addAttribute("msg","a+b="+result);
        return "test";
    }
}

Controller方法返回值

  1. 返回ModelAndView
    默认使用mv对象返回,可以指定model数据模型和指定view
public class ControllerTest01 implements Controller {
   public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
       ModelAndView mv = new ModelAndView();
       mv.addObject("msg","返回ModelAndView");
       mv.setViewName("test");
       return mv;
  }
}
  1. 返回void(不需要视图解析器)
    特殊返回值类型,比如转发
  • 转发
    使用HttpServletRequestHttpServletResponse两个默认入参来实现转发
  • 重定向
    使用reponse对象实现
  • json
    直接写出到reponse的响应输出流中
  • 图片
    将图片写出到reponse的响应字节输出流中
  1. 返回String
  • 逻辑视图名,相当于执行转发操作
  • 转发(不需要视图解析器)
    在返回字符串前添加前缀:forward:
    此时,不会经过视图解析器进行跳转,直接转发,需要写上物理路径
  • 转发(需要视图解析器)
    直接return string
  • 重定向
    在跳转路径前添加前缀redirect:
    还有一种方式可以实现重定向:定义一个重定向视图RedirectView对象将其放入modelandview中返回
  1. 返回对象bean(json)
    默认情况下,springmvc无论返回什么类型,都会默认被当成逻辑视图名来处理。如果返回类型为bean,不知道view的视图名时,默认用当前controller的访问路径来作为逻辑视图名返回如果需要直接作为reponse中的数据返回,那么需要添加注解:@ResponseBody