多学习。

常用注解(PathVariable中介绍restful编程风格)

RequestParam

作用:可以解决前台传值名称与后台名字不匹配导致无法接受的问题。
属性:required——是否必须有该值,默认是true,若接受不到该值则会报错400:Bad Request

    //必须传一个为name的变量,否则会出现400:Bad Request,因为required为true设为false则不会
    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam("name") String username){
        System.out.println(username);
        System.out.println("执行了...");
        return "success";
    }

RequestBody

作用:获取请求体内容。直接使用得到是 key=value&key=value... 结构的数据(get请求方式不适用,get无请求体)
属性:required——是否必须有请求体,默认值是:true。当取值为true,get请求方式会报错。为false,get请求得到的是null

    //通过此注解body即可接受请求体
    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String body){
        System.out.println(body);
        return "success";
    }

PathVariable

前置知识:restful编程风格

注解介绍

作用:用于绑定url中的占位符。例如:请求url中/delete/{id},这个id就是url的占位符。
属性:value——用于指定url中占位符的名称 required——是否必须提供占位符

  //<a href="anno/testPathVariable/10">PathVariable</a>
    @RequestMapping("/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") String id){
        System.out.println(id);
        return "success";
    }

RequestHeader

作用:用于获取指定请求头的值
属性:value——请求头的名称 required——是否必须有此消息头

    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader("Accept") String header){
        System.out.println(header);
        return "success";
    }

CookieValue

作用:用于把指定cookie名称的值传入控制器方法参数
属性:value——指定cookie名称 required——是否必须有cookie

  //使用jsp必回生成一个session,浏览器用cookie保存该session的id
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue("JSESSIONID") String cookieValue){
        System.out.println(cookieValue);
        return "success";
    }

ModelAttribute

作用:出现在方法上——当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰具有具体返回值的方法。 出现在参数上,获取指定的数据给参数赋值。
属性:value——用于获取数据的key。key可以是POJO的属性名称,也可以是map结构的key。
应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
例如:在编辑一个用户时,用户拥有一个创建信息的字段,该字段的值不能被修改。在提交表单数据是肯定没有该字段的值,一旦更新会把该字段设置为null,此时可以用此注解来解决问题。

前台无date数据

    <form action="anno/testModelAttribute" method="post">
        用户姓名: <input type="text" name="uname"><br>
        用户年龄: <input type="text" name="age"><br>
        <input type="submit" value="提交">
    </form>

通过ModelAttribute将date赋予原来的值,不要为null
有返回值:

    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(User user){
        System.out.println("testModelAttribute执行了");
        System.out.println(user);
        return "success";
    }

    /**
     * 该方法会先执行
     */
    @ModelAttribute
    public User showUser(String uname){
        System.out.println("showUser执行了");

        //通过用户名查询数据库(模拟)
        User user = new User();
        user.setUname(uname);
        user.setAge(20);
        user.setDate(new Date());

        return user;
    }

无返回值:

    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(@ModelAttribute("abc") User user){
        System.out.println("testModelAttribute执行了");
        System.out.println(user);
        return "success";
    }

    @ModelAttribute
    public void showUser(String uname, Map<String,User> map){
        //通过用户名查询数据库(模拟)
        User user = new User();
        user.setUname(uname);
        user.setAge(20);
        user.setDate(new Date());

        //将数据存入map集合
        map.put("abc",user);
    }

SessionAttributes

作用:用于多次执行控制器方法间的参数共享(只能作用在类上)
属性:value——用于指定存入的属性名称 type:用于指定存入的数据类型

@Controller
@RequestMapping("/anno")
@SessionAttributes(value = {"msg"}) //把msg=哈哈再存入session域对象中
public class ParamController{
  @RequestMapping("/testSessionAttributes")
    public String testSessionAttributes(Model model) {
        System.out.println("testSessionAttributes...");
        //底层会存储到request域对象中
        model.addAttribute("msg", "哈哈哈");
        return "success";
    }

    /**
     * 从session中取值
     *
     * @param modelMap
     * @return
     */
    @RequestMapping("/getSessionAttributes")
    public String getSessionAttributes(ModelMap modelMap) {
        System.out.println("getSessionAttributes...");
        //从session中获取
        System.out.println(modelMap.get("msg"));
        return "success";
    }


    @RequestMapping("/delSessionAttributes")
    public String dekSessionAttributes(SessionStatus status) {
        System.out.println("delSessionAttributes...");
        //清除session
        status.setComplete();
        return "success";
    }
}
posted @   czyaaa  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示