SpringMVC注解简单使用

@ModelAttribute

作用:在控制器方法执行之前优先执行
作用范围:方法,参数

如果@ModelAttribute添加在含有@RequestMapping的注解上,那么@RequestMapping就会失效,就会返回一个和路径一样的页面

  1. 没有返回值,接收单个
	//访问路径	http://localhost:8983/model1/modelAttribute?username=张三
	@ModelAttribute
    public void testModelAttribute(User user){
        // 对象中的属性名要和参数名一致
        // 参数中对象的属性名可以和路径中参数名不一致
        System.out.println("这里是ModelAttribute的方法:" + user.getUsername());
    }

	@RequestMapping("/modelAttribute")
    public String test(User user){
        System.out.println("这里是RequestMapping的方法:" + user);
        return "success";
    }

在这里插入图片描述
2. 没有返回值,使用map

	//访问路径:	http://localhost:8983/model3/modelAttribute2?username=张三
	@ModelAttribute
    public void testModelAttribute(String username,Map<String,User> map){
        System.out.println("这里是ModelAttribute的方法:" + username);
        User user = new User("李四", "13");
        map.put("last",user);
    }
    
    @RequestMapping("/modelAttribute2")
    public String test(@ModelAttribute(value = "last") User user){
        System.out.println("这里是RequestMapping的方法:" + user);
        return "success";
    }

在这里插入图片描述
3. 有返回值

	//访问路径:	http://localhost:8983/model2/modelAttribute1?username=张三
	@ModelAttribute
    public User testModelAttribute(User user){
        System.out.println("这里是ModelAttribute的方法:" + user);
        user.setAge("123");
        return user;
    }

	@RequestMapping("/modelAttribute1")
    public String test(User user){    //这里的user参数是接收的上面的返回的user
        System.out.println("这里是RequestMapping的方法user1:" + user);
        return "success";
    }

在这里插入图片描述

@SessionAttribute

作用:用于多次执行控制器方法间的参数共享。
作用范围:类

属性:
value:用于指定存入的属性名称
type:用于指定存入的数据类型。

@Controller
@RequestMapping("/sessionAttribute")
@SessionAttributes(value={"name","sex","modelMap","age"},types = Integer.class)
public class SessionAttribute1 {
    // 存储数据
    @RequestMapping("/put")
    public String put(Model model, ModelMap modelMap){
        //要想使用SessionAttributes存储数据,要使用Model来操作
        
        // 添加方式1
        modelMap.addObject("name","张三");
        modelMap.addObject("sex","男");
        modelMap.addObject("age",12);
        modelMap.addObject("modelMap","这是modelMap");

        // 添加方式2
        modelMap.addAttribute("name","张三");
        modelMap.addAttribute("sex","男");
        modelMap.addAttribute("age",12);
        modelMap.addAttribute("modelMap","这是modelMap");

        // 添加方式3
        model.addAttribute("name","张三");
        model.addAttribute("sex","男");
        model.addAttribute("age",12);
        model.addAttribute("modelMap","这是modelMap");
        
        return "success";
    }

    // 获取数据
    @RequestMapping("/get")
    public String get(ModelMap modelMap){
        Object name = modelMap.get("name");
        Object sex = modelMap.get("sex");
        Object age = modelMap.get("age");
        Object mm = modelMap.get("modelMap");
        System.out.println("name:    " + name);
        System.out.println("sex:    " + sex);
        System.out.println("age:    " + age);
        System.out.println("mm:    " + mm);
        return "success";
    }

    // 删除数据
    @RequestMapping("/clean")
    public String clean(SessionStatus sessionStatus){
        sessionStatus.setComplete();
        return "success";
    }
    
    // 删除数据
    @RequestMapping("/delete")
    public String delete(ModelMap modelMap){
        modelMap.clear();
        //使用sessionStatus清理
        return "success";
    }
}

在另一个类中获取刚才存入的数据

@Controller
@RequestMapping("/sessionAttribute2")
//想要获取上个类中哪个属性,就在value中写要获取的name,不写获取的值为null
@SessionAttributes(value={"modelMap","name","sex","age"})
public class SessionAttribute2 {
    // 获取数据
    @RequestMapping("/get")
    public String get(ModelMap modelMap){
        Object name = modelMap.get("name");
        Object sex = modelMap.get("sex");
        Object age = modelMap.get("age");
        Object mm = modelMap.get("modelMap");
        System.out.println("name:    " + name);
        System.out.println("sex:    " + sex);
        System.out.println("age:    " + age);
        System.out.println("mm:    " + mm);
        return "success";
    }
}

@RequestBody

作用:用于获取请求体内容,直接使用可以得到key=value&key=value的内容,get方式不适用;
作用范围:参数

依赖

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.5</version>
</dependency>

如果没有添加json格式依赖,参数可以是键值对形式和json形式以及文本形式,但是参数不会和实体类映射

   @RequestMapping("request")
   public String request(@RequestBody(required = false) String body){
       try {
           //body被urlencode编译.这里进行解码
           body = URLDecoder.decode(body, "UTF-8");
       } catch (UnsupportedEncodingException e) {
           e.printStackTrace();
       }
       System.out.println(body);
       return "success";
   }

请求参数
在这里插入图片描述
结果
在这里插入图片描述
添加了json格式支持,可以将参数与实体类映射

    @RequestMapping("requestuser")
    public String request(@RequestBody(required = false) User user){
        System.out.println(user);
        return "success";
    }

请求参数
在这里插入图片描述
结果
在这里插入图片描述

@ResponseBody

作用:将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如:json,xml 等,通过 Response 响应给客户端
作用范围:方法
    @RequestMapping("response")
    public @ResponseBody User response(@RequestBody User user){
        System.out.println(user);
        return user;
    }

请求参数
在这里插入图片描述
结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值