SpringMVC常用注解笔记

SpringMVC注解开发详解

路径映射@RequestMapping

  • @RequestMapping("/user") ,用于映射 HTTP 请求到特定的处理方法(Controller 方法)上。它可以用于类级别和方法级别,用于定义处理请求的路径和其他相关属性。包括 GET、POST、PUT、DELETE 等。默认情况下,它适用于处理所有类型的请求。如果要限定 @RequestMapping 的请求方法,可以使用 method 属性指定所需的请求方法。例如:

    @ResponseBody
    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public String getUserList() {
        // 处理用户列表 GET 请求
        return "user-list";
    }
    
  • 需要注意的是,在 Spring 4.3 及以上版本,可以使用更简洁的语法来指定请求方法。例如:

    @ResponseBody
    @GetMapping("/users")
    public String getUserList() {
        // 处理用户列表 GET 请求
        return "user-list";
    }
    @ResponseBody
    @PostMapping("/users")
    public String createUser() {
        // 处理创建用户 POST 请求
        return "user-created";
    }
    

返回类型@ResponseBody

  • @ResponseBody 是 Spring MVC 中的注解,用于指示方法或控制器返回的对象应作为响应的主体部分,而不是作为视图名称解析的一部分。它将方法的返回值直接转换为响应的内容,通常用于返回 JSON、XML 或其他格式的数据。Controller方法返回值默认表示要跳转的页面,没有对应的页面就会报错。如果不想跳转页面而是响应数据,那么就需要在方法上使用@ResponseBody注解。如果控制器类上已经使用了 @RestController 注解,则该类中的所有方法都将默认使用 @ResponseBody 注解,无需再单独添加 @ResponseBody 注解。
  • 使用 @ResponseBody 注解的方法可以返回各种类型的数据,包括:
    • Java 对象:Spring MVC会自动将其转换为 JSON、XML 或其他格式的数据,并设置正确的 Content-Type 头部。
    • 字符串:直接将字符串作为响应的内容返回。
    • 字节数组:将字节数组作为响应的内容返回。

@RequestBody

  • 可以作为json参数接受一个对象:

    @PostMapping("/user")
    @ResponseBody
    public User createUser(@RequestBody User user) {
    	// 处理创建用户的逻辑
    	return userService.createUser(user);
    }
    

配置类@Configuration

  • 标识配置类:使用 @Configuration 注解将一个类标识为配置类,该类通常用于定义 Spring 应用程序的配置信息。
  • 声明 Bean:在配置类中使用 @Bean 注解声明一个方法,该方法将返回一个对象实例,Spring 容器会将其注册为一个 Bean,并根据需要进行依赖注入。
  • 组件扫描:使用 @ComponentScan 注解指示 Spring 容器在指定的包中扫描组件,自动将其识别为 Bean。
  • 导入其他配置类:使用 @Import 注解导入其他配置类,实现配置的模块化和复用。

请求参数名称关联@RequestParam(“name”)

  • 请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系

    参数:

    • required:是否为必传参数
    • defaultValue:参数默认值
    @RequestMapping("/update")
    @ResponseBody
    public String update(@RequestParam("name") String
    userName , int age){ 
        return "{'module':'common param different name'}";
    }
    

POJO类型参数自动封装

//POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
    System.out.println("pojo参数传递 user ==> "+user);
    return "{'module':'pojo param'}";
}
  • 请求参数key的名称要和POJO中属性的名称一致,否则无法封装。
  • 嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数,即属性名 . 引用属性名进行传参。

@RequestBody与@RequestParam区别

  • @RequestParam用于接收url地址传参,表单传参【application/x-www-formurlencoded】
  • @RequestBody用于接收json数据【application/json】
  • 后期开发中,发送json格式数据为主,@RequestBody应用较广如果发送非json格式数据,选用@RequestParam接收请求参数

日期类型@DateTimeFormat

接收形参时,根据不同的日期格式设置不同的接收方式 ,如下:

//日期参数 http://localhost:80/dataParam?date=2088/08/08&date1=2088-08-
18&date2=2088/08/28 8:08:08
//使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,@DateTimeFormat(pattern="yyyy-MM-dd") Date date1, @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
    System.out.println("参数传递 date ==> "+date);
    System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
    System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
    return "{'module':'data param'}";
}

响应页面

@Controller
public class UserController {
//响应页面/跳转页面
//返回值为String类型,设置返回值为页面名称,即可实现页面跳转
@RequestMapping("/toJumpPage")
public String toJumpPage(){
        System.out.println("跳转页面");
        return "page.jsp";
    }
}

REST 风格

REST(Representational State Transfer),表现形式状态转换
  • 传统风格资源描述形式
    • http://localhost/user/getById?id=1
    • http://localhost/user/saveUser
  • REST风格描述形式
    • http://localhost/user/1
    • http://localhost/user
RESTful介绍
  • 按照REST风格访问资源时使用行为-动作区分对资源进行了何种操作
    • http://localhost/users 查询全部用户信息 (查询)
    • http://localhost/users/1 查询指定用户信息(查询)
    • http://localhost/users 添加用户信息(新增/保存)
    • http://localhost/users 修改用户信息(修改/更新)
    • http://localhost/users/1 删除用户信息(删除)
@Controller
public class UserController {
//设置当前请求方法为POST,表示REST风格中的添加操作
    @RequestMapping(value = "/users",method = RequestMethod.POST)
    @ResponseBody
    public String save(RequestBody User user){
        System.out.println("user save...");
        return "{'module':'user save'}";
    }
//设置当前请求方法为DELETE,表示REST风格中的删除操作
//@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同
    @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
    @ResponseBody
    public String delete(@PathVariable Integer id){
        System.out.println("user delete..." + id);
        return "{'module':'user delete'}";
    }
//设置当前请求方法为PUT,表示REST风格中的修改操作
    @RequestMapping(value = "/users",method = RequestMethod.PUT)
    @ResponseBody
    public String update(@RequestBody User user){
        System.out.println("user update..."+user);
        return "{'module':'user update'}";
    }
//设置当前请求方法为GET,表示REST风格中的查询操作
//@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同
    @RequestMapping(value = "/users/{id}" ,method = RequestMethod.GET)
    @ResponseBody
    public String getById(@PathVariable Integer id){
        System.out.println("user getById..."+id);
        return "{'module':'user getById'}";
    }
//设置当前请求方法为GET,表示REST风格中的查询操作
    @RequestMapping(value = "/users",method = RequestMethod.GET)
    @ResponseBody
    public String getAll(){
        System.out.println("user getAll...");
        return "{'module':'user getAll'}";
    }
}

@PathVariable介绍

绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应,使用 @PathVariable 注解时,需要在注解中指定路径变量的名称,并将其作为方法参数进行声明。当请求被映射到带有 @PathVariable 注解的处理方法时,Spring MVC 会自动将路径变量的值绑定到相应的方法参数上。

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUserById(@PathVariable("id") Long id) {
        // 根据用户ID查询用户信息
        return userService.getUserById(id);
    }
    // 其他方法...
}

需要注意的是,@PathVariable 注解默认是必需的,即请求中必须包含路径变量的值。如果路径变量的值在请求中不存在,将会引发异常。如果希望路径变量是可选的,可以使用 required 属性进行配置。

@GetMapping("/{id}")
public User getUserById(@PathVariable(value = "id", required = false) Long id) {
    // ...
}

@RequestBody、@RequestParam、@PathVariable区别和应用

  • 区别
    • @RequestParam用于接收url地址传参或表单传参,(@RequestParam("name") String userName , int age),(@RequestParam List likes)
    • @RequestBody用于接收json数据,(@RequestBody User user)
    • @PathVariable用于接收路径参数,使用{参数名称}描述路径参数
  • 应用
    • 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广如果发送非json格式数据,选用@RequestParam接收请求参数采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值。

@RestController注解

设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解组合功能

你可能感兴趣的:(Java,基础与框架整合,java,spring,SpringMVC注解,注解,Spring,注解)