Spring MVC常用注解(二)

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;
    }

猜你喜欢

转载自blog.csdn.net/wang_snake/article/details/80671535