SpringMVC一些常用注解

SpringMVC一些常用注解

目录

SpringMVC一些常用注解

@RequestMapping

@RequestParam

@RequestBody

@PathVariable

@RequestHeader

@CookieValue

@SessionAttributes、@SessionAttribute

@ModelAttribute

@ResponseBody


@RequestMapping


注解:@RequestMapping
属性:value:和path属性作用是一样的,而且只有这一个属性且只有一个值的时候可以省略
      method:用于指定方法的具体的请求方式,请求方式不同则不执行方法
      headers:用于指定限制请求消息头的条件
      params:指定限制请求参数的条件
         |-params = {"username"} 要求必须传入一个username的参数
         |-params = {"username=kris"} 要求必须传入一个username的参数,且username的值为kris
         |-params = {"money!100"}    要求请求的money参数不能为100
以上四个属性只要出现2个或以上时,它们的关系是与的关系

 

package com.bran.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


@Controller
@RequestMapping(path = "/test")
public class RequestMappingController {

    //@RequestMapping("/testRequestMapping")
    //@RequestMapping(path = "/testRequestMapping")
    @RequestMapping(value = "/testRequestMapping",method = {RequestMethod.GET})//要求必须用GET方式请求
    public String testRequestMapping(){
        System.out.println("测试RequestMapping");
        return "success";
    }


    @RequestMapping(value = "/testRequestMapping2",params = {"username"} )//要求必须传入一个username的参数
    public String testRequestMapping2(){
        System.out.println("测试RequestMapping2");
        return "success";
    }

}

 

@RequestParam

注解:@RequestParam
作用:把请求中指定名称的参数给控制器中的形式参数赋值
属性:value:请求参数的名称
      name:和value一样
      required:请求参数中是否提供此参数。默认值:true。表示必须提供,不提供会出错

 

@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name = "name") String username) {
   System.out.println(username);
   return "success";
}

 

@RequestBody


注解:@RequestBody
作用:用于获取请求体的内容。直接使用得到是key=value&key=value...结构的数据。
     GET请求方式不适用(没有请求体)
属性:required:是否必须有请求体。默认值为true。
      当取值为true时,GET请求方式会报错。
      当取值为false时,GET请求得到的是null。
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
   System.out.println(body);
   return "success";
}

 

@PathVariable


注解:@PathVariable
作用:用于绑定URL中的占位符,例如:请求URL中的/delete/{id},这个{id}就是URL占位符。
      URL支持占位符是Spring3.0之后加入的。是SpringMVC支持REST风格URL的一个重要标志。
属性:value:用于指定URL中占位符名称
      required:是否必须提供占位符。
@RequestMapping("/testPathVariable/{sid}")
public String testPathVaribale(@PathVariable(name = "sid")String id){
   System.out.println(id);
   return "success";
}

 

@RequestHeader

注解:@RequestHeader
作用:用于获取请求消息头
属性:value:提供消息头名称
     required:是否必须有此消息头
@RequestMapping("/testRequestHeader")
public  String testRequestHeader(@RequestHeader(value = "Accept") String header){
   System.out.println(header);
   return "success";
}

 

@CookieValue

注解:@CookieValue
作用:用于把指定的cookie名称的值传入控制器方法参数
属性:value:指定cookie的名称
      required:是否必须有此cookie
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookie){
    System.out.println("JSESSIONID = "+cookie);
    return "success";
}

 

@SessionAttributes、@SessionAttribute

注解:@SessionAttributes
作用:用于多次执行控制器方法间的参数共享
属性:value:用于指定存入属性名称
      type:用于指定存入数据类型


注解:@SessionAttribute
作用:获取预先存在的全局会话属性
属性:value:要获取的属性的名称
      name:和value属性一样
      required:是否必须有该属性
package com.bran.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;


/**
 * 常用注解练习
 */
@Controller
@RequestMapping("/anno")
@SessionAttributes(value={"message"}) //model的属性message会被存到session中
public class AnnotationController {
  
    @RequestMapping("/testSessionAttributes")
    public String testSessionAttributes(Model model){
        model.addAttribute("message","大家好啊");
        return "message";
    }

    @RequestMapping("/testSessionAttribute")
    public String testSessionAttribute(@SessionAttribute("message") String message){
        System.out.println(message);
        return "message";
    }

}

 

@ModelAttribute

注解:@ModelAttribute
作用:可以用于修饰方法和参数。
      出现在方法上,表示当前所在类的方法会在控制器的方法执行之前先执行, 可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
      出现在参数上,获取指定的数据给参数赋值
属性:value:用于获取数据的key,key可以是POJO的属性名称,也可以是map结构的key
运用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据字段使用数据库对象原来的数据
注意:被@ModelAttribute注释的方法会在当前的Controller每个方法执行前被执行,因此对于一个Controller映射多个URL的用法来说,要谨慎使用。

 新建一个实体类Book

package com.bran.domain;

import lombok.Data;
import java.util.Date;

@Data
public class Book {

    private String name;

    private String author;

    private Date date;
}

接着新建一个Controller,用来接收前端表单传来的两个数据name和author,没有传入date数据,传入的实体类型数据不是完整的

package com.bran.controller;

import com.bran.domain.Book;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.Map;


@Controller
@RequestMapping("/anno2")
public class Annotation2Controller {

    /**
     * 表单提交数据不是完整的实体数据时,无返回值的处理步骤
     */
    @RequestMapping("/testModelAttribute")
    public String ModelAttribute(@ModelAttribute(value = "book") Book book) {
        System.out.println(book);
        return "success";
    }

    /**
     * 该方法会先执行,无返回值
     */
    @ModelAttribute
    public void showBook(String name, String author, Map map) {
        Book book = new Book();
        book.setName(name);
        book.setAuthor(author);
        book.setDate(new Date());
        System.out.println("showBook执行了");
        map.put("book", book);
    }

}
package com.bran.controller;

import com.bran.domain.Book;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.Map;


/**
 * 常用注解练习2
 */
@Controller
@RequestMapping("/anno2")
public class Annotation2Controller {
   
    /**
     * 表单提交数据不是完整的实体数据时,有返回值的处理步骤
     *
     */
    @RequestMapping("/testModelAttribute")
    public String ModelAttribute(Book book){
        System.out.println(book);
        return "success";
    }

    /**
     * 该方法会先执行,有返回值
     */
    @ModelAttribute
    public Book showBook(String name,String author){
        //模拟用户查询数据库
        Book book = new Book();
        book.setName(name);
        book.setAuthor(author);
        book.setDate(new Date());
        System.out.println("showBook执行了");
        return book;
    }

}

@ResponseBody

注解:@ResponseBody
作用:把返回的对象转换成指定格式的数据(json、xml)响应给客户端
@ResponseBody
@RequestMapping("/testJson")
public User testJson(@RequestBody User user){
   System.out.println("testJson方法执行了");
   //客户端发送ajax请求,传的是json字符串,后端把json字符串封装到user对象
   System.out.println(user);
   //做响应,模拟数据库操作
   user.setAge(12);
   user.setUname("管理员");
   return user;
}

 

你可能感兴趣的:(SpringMVC一些常用注解)