SpringMVC
控制器Controller
- 注解形式的Controller
- @Controller声明一个类是控制器
- @RequestMapping("")映射访问路径
入参绑定
-
简单类型
当请求中的参数名和处理器中的形参名保持一致,这时会将请求参数和形参进行绑定。,表示从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";
}
}
-
绑定pojo类型(bean)
方法参数可以是pojo类型,在传递参数时要求请求中参数名和bean对象的属性名保持一致,这时可以自动映射。
如果需要给传递回前端的对象修改名字,可以使用如下注解@ModelAttribute(“loginUser”) User user -
绑定日期类型
没有默认转换器,需要自定义转换类,并将转换器放入注解驱动中
转换器接口
Converter 重写convert() -
数组和集合类型
(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方法返回值
- 返回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;
}
}
-
返回void(不需要视图解析器)
特殊返回值类型,比如转发- 转发
使用HttpServletRequest,HttpServletResponse两个默认入参来实现转发 - 重定向
使用reponse对象实现 - json
直接写出到reponse的响应输出流中 - 图片
将图片写出到reponse的响应字节输出流中
- 转发
-
返回String
- 逻辑视图名,相当于执行转发操作
- 转发(不需要视图解析器)
在返回字符串前添加前缀:forward:
此时,不会经过视图解析器进行跳转,直接转发,需要写上物理路径 - 转发(需要视图解析器)
直接return string - 重定向
在跳转路径前添加前缀redirect:
还有一种方式可以实现重定向:定义一个重定向视图RedirectView对象将其放入modelandview中返回
-
返回对象bean(json)
默认情况下,springmvc无论返回什么类型,都会默认被当成逻辑视图名来处理。如果返回类型为bean,不知道view的视图名时,默认用当前controller的访问路径来作为逻辑视图名返回如果需要直接作为reponse中的数据返回,那么需要添加注解:@ResponseBody