文章目录
Spring MVC 框架提供了一系列注解,用于简化开发者的编码工作,并提高代码的可读性和可维护性。以下是 Spring MVC 中常用的注解:
@Controller:
用于标识一个类为控制器,通常用于处理用户请求。
@Controller
public class MyController {@GetMapping("/hello")public String hello() {return "hello";}
}
@RestController:
@RestController注解实际上相当于@Controller和@ResponseBody注解的组合。它的作用是将一个控制器类标识为RESTful风格的控制器,并指示Spring将控制器方法的返回值直接转换为JSON或XML格式,并将其作为HTTP响应返回给客户端
@RestController
public class MyRestController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}
@RequestMapping:
用于映射HTTP请求URL到控制器的处理方法上,可以用于类级别和方法级别。常用属性包括value(URL路径)、method(请求方法)、params(请求参数)、headers(请求头)等。
@Controller
@RequestMapping("/example")
public class ExampleController {@GetMapping("/hello")public String hello() {return "hello";}
}
@PathVariable:
用于将URL路径中的占位符绑定到控制器方法的参数上,常用于获取RESTful风格URL中的参数。
@Controller
public class MyController {@GetMapping("/hello/{name}")public String hello(@PathVariable("name") String name) {return "Hello, " + name + "!";}
}
@RequestParam:
用于将请求参数绑定到控制器方法的参数上,常用于获取HTTP请求中的参数值。
@Controller
public class MyController {@GetMapping("/hello")public String hello(@RequestParam("name") String name) {return "Hello, " + name + "!";}
}
@RequestBody:
用于将HTTP请求体中的数据绑定到控制器方法的参数上,常用于处理POST请求中的JSON或XML数据。
@RestController
public class MyRestController {@PostMapping("/user")public String createUser(@RequestBody User user) {return "User created: " + user.toString();}
}
@ResponseBody:
用于将控制器方法的返回值直接转换为JSON或XML格式,并将其作为HTTP响应返回给客户端。
@Controller
public class MyRestController {@GetMapping("/hello")@ResponseBodypublic String hello() {return "Hello, World!";}
}
@ModelAttribute:
用于将请求参数绑定到模型对象上,通常用于将表单数据传递给控制器方法。
@Controller
public class MyController {@PostMapping("/user")public String createUser(@ModelAttribute User user) {return "User created: " + user.toString();}
}
@SessionAttributes:
用于指定控制器类中哪些模型属性需要存储在会话(Session)中,以便多个请求之间共享数据。
@Controller
@SessionAttributes("user")
public class MyController {@GetMapping("/setUser")public String setUser(Model model) {User user = new User("John");model.addAttribute("user", user);return "user";}@GetMapping("/getUser")public String getUser(@ModelAttribute("user") User user) {return "Hello, " + user.getName() + "!";}
}
@Valid:
用于启用数据验证功能,并将验证结果存储到BindingResult对象中。
@Controller
public class MyController {@PostMapping("/user")public String createUser(@Valid @ModelAttribute User user, BindingResult result) {if (result.hasErrors()) {return "error";}return "User created: " + user.toString();}
}
@InitBinder:
用于自定义数据绑定规则,通常用于注册自定义的属性编辑器(PropertyEditor)或校验器(Validator)。
@Controller
public class MyController {@PostMapping("/user")public String createUser(@Valid @ModelAttribute User user, BindingResult result) {if (result.hasErrors()) {return "error";}return "User created: " + user.toString();}
}
@ExceptionHandler:
用于处理控制器方法中抛出的异常,可用于定义全局异常处理器或局部异常处理器。
@Controller
public class MyController {@ExceptionHandler(Exception.class)public String handleException(Exception ex) {return "error";}@GetMapping("/hello")public String hello() throws Exception {throw new Exception("Something went wrong");}
}
@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'}";
}
注意事项
传递日期类型参数必须在配置类上使用@EnableWebMvc注解。其功能之一:根据类型匹配对应的类型转换器。
@EnableWebMvc:
开启自动转换json数据的支持
@Configuration
@ComponentScan("com.itheima.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}
注意事项:
@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换
在Controller中编写方法接收json参数
//集合参数:json格式
//1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
//2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){System.out.println("list common(json)参数传递 list ==> "+likes);return "{'module':'list common for json param'}";
}
@EnableWebMvc注解介绍
- 名称:@EnableWebMvc
- 类型:配置类注解
- 位置:SpringMVC配置类定义上方
- 作用:开启SpringMVC多项辅助功能
- 范例:
@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc
public class SpringMvcConfig {
}