在Spring Boot中,控制层(Controller)是MVC架构中的重要组成部分,主要用于处理用户的HTTP请求,并将请求转发到业务层(Service)进行处理。以下是Spring Boot控制层中常用的语法和相关注解:
- @Controller 和 @RestController
@Controller:用于定义一个普通的控制器类,通常用于返回视图页面(如HTML页面)。在使用@Controller时,需要配合Model或ModelAndView来返回视图。
java复制
@Controller
public class MyController {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello"; // 返回视图名称
}
}
@RestController:用于定义一个返回JSON或XML数据的控制器类。它是一个组合注解,相当于@Controller + @ResponseBody,通常用于构建RESTful API。
java复制
@RestController
public class MyRestController {
@RequestMapping("/hello")
public String hello() {
return "Hello, World!";
}
} - @RequestMapping
用于定义请求的映射规则,可以指定请求的URL路径、请求方法(GET、POST、PUT、DELETE等)、请求头、请求参数等。
java复制
@RequestMapping(value = "/user", method = RequestMethod.GET)
public String getUser() {
return "User Data";
}
常用的快捷注解:
@GetMapping:等同于@RequestMapping(method = RequestMethod.GET)。
java复制
@GetMapping("/user")
public String getUser() {
return "User Data";
}
@PostMapping:等同于@RequestMapping(method = RequestMethod.POST)。
java复制
@PostMapping("/user")
public String createUser() {
return "User Created";
}
@PutMapping:等同于@RequestMapping(method = RequestMethod.PUT)。
java复制
@PutMapping("/user")
public String updateUser() {
return "User Updated";
}
@DeleteMapping:等同于@RequestMapping(method = RequestMethod.DELETE)。
java复制
@DeleteMapping("/user")
public String deleteUser() {
return "User Deleted";
} - @RequestParam
用于绑定请求参数到方法的参数上。
java复制
@GetMapping("/user")
public String getUser(@RequestParam String name, @RequestParam int age) {
return "Name: " + name + ", Age: " + age;
}
如果参数是可选的,可以设置required = false,并提供默认值:
java复制
@GetMapping("/user")
public String getUser(@RequestParam(required = false, defaultValue = "Guest") String name) {
return "Name: " + name;
} - @PathVariable
用于绑定URL中的占位符到方法的参数上。
java复制
@GetMapping("/user/{id}")
public String getUserById(@PathVariable("id") int userId) {
return "User ID: " + userId;
} - @RequestBody
用于接收请求体中的JSON或XML数据,并将其自动转换为Java对象。
java复制
@PostMapping("/user")
public String createUser(@RequestBody User user) {
return "User Name: " + user.getName() + ", Age: " + user.getAge();
} - @ResponseBody
用于将方法的返回值直接作为响应体返回给客户端。通常与@Controller一起使用。
java复制
@Controller
public class MyController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "Hello, World!";
}
} - @RequestHeader
用于获取请求头中的信息。
java复制
@GetMapping("/user")
public String getUser(@RequestHeader("User-Agent") String userAgent) {
return "User Agent: " + userAgent;
} - @RequestPart
用于接收Multipart请求中的文件或数据。
java复制
@PostMapping("/upload")
public String uploadFile(@RequestPart("file") MultipartFile file) {
return "File uploaded: " + file.getOriginalFilename();
} - @ResponseStatus
用于指定方法的HTTP状态码。
java复制
@GetMapping("/error")
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleError() {
return "Error Page";
} - @ExceptionHandler
用于定义全局异常处理器,捕获并处理特定类型的异常。
java复制
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleException(Exception e) {
return "Error: " + e.getMessage();
}
}
这些注解和语法是Spring Boot控制层开发中常用的工具,通过合理使用它们,可以方便地处理各种HTTP请求和响应。