Spring MVC注解汇总
6.@ModelAttribute
1)modelattribute注解在方法的前面
因为有modelattribute注解,将创建对象放入model中。最后这个对象会放入作用域;
如果注解后面有(名字),那么创建的对象,会是注解后面指定的名字。
//每次在调用这个controller的其他的方法前,这个方法都会先执行
@ModelAttribute
public User hello(){
return new User(1,"a","b",new Date());
}
2)modelattribute注解在参数前面
这样的注解,首先springmvc,会先去model找有没有这个对象,如果有,属性注入Parma参数中,并且最后返回到前端时,user这个对象,会以名字user2放入作用域。
public String test6(@ModelAttribute("user2") User user){
扩展:传参类型Model数据
@Controller
public class FreemarkerController {
@SuppressWarnings("unchecked")
@RequestMapping(method = RequestMethod.POST, value = "/freemarker")
public String getFtl(Model model) {
// 构造填充数据的Map
Map map = new HashMap();
List<TestVo> testVos = new ArrayList<>();
TestVo testVo = new TestVo();
testVo.setName("fulei");
TestVo testVo1 = new TestVo();
testVo1.setName("wangmeng");
testVos.add(testVo);
testVos.add(testVo1);
map.put("user", "love");
map.put("url", "http://www.baidu.com/");
map.put("name", "百度");
map.put("testVos", testVos);
model.addAllAttributes(map);
return "test";
}
}
7.@Validated
注解验证,对po实体类进行校验。
8.@CrossOrigin
用在方法上,通过此方式注解则Controller中的所有通过@RequestMapping注解的方法都可以进行跨域请求。
9.@RestController
Spring4.1中添加了@RestController注解,集成了@ResponseBody注解,相当于@Controller + @ResponseBody。
但是却发现个问题,之前用@Controller注解的时候经常会如下所示的返回到视图页面index.jsp:
@RequestMapping(value="/tologin", method=RequestMethod.GET)
public String login(){
return "index";
}
但是问题来了,由于使用的是@RestController注解,其中含有@ResponseBody注解,结果index没有经过视图解析器解析,直接变成json字符串返回给浏览器了。解决办法如下:
@RequestMapping(value="/tologin", method=RequestMethod.GET)
public ModelAndView login(){
ModelAndView mv = new ModelAndView("index");
return mv;
}