Spring Boot使得创建RESTful服务变得非常简单。通过使用Spring Web MVC提供的注解,可以轻松定义控制器、处理请求和返回响应。
@RestController与@Controller的区别
@RestController
和@Controller
是Spring MVC中的两个用于定义控制器的注解,它们的主要区别在于响应体的处理。
@Controller
是一个常规的MVC控制器,它通常返回视图(即HTML页面),或者当配合@ResponseBody
注解使用时也可以返回对象数据。@RestController
是一个组合注解,它是@Controller
和@ResponseBody
的结合体,用于创建RESTful控制器。它确保每个方法都隐式地使用了@ResponseBody
,因此方法返回的对象数据直接写入HTTP响应体中。
示例:使用@RestController
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
@GetMapping("/greeting")
public String greeting() {
return "Hello, World!";
}
}
在上面的例子中,GreetingController
使用@RestController
注解,因此greeting
方法返回的字符串会直接作为HTTP响应体返回给客户端。
请求映射注解
Spring MVC提供了一系列注解来映射HTTP请求到控制器的处理方法。最常用的请求映射注解包括@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
和@RequestMapping
。
示例:使用请求映射注解
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
// 模拟从数据库获取用户
return new User(id, "John Doe");
}
@PostMapping
public User createUser(@RequestBody User user) {
// 模拟创建用户
return user;
}
// 更多的请求处理方法...
}
class User {
private Long id;
private String name;
// 构造方法、getter和setter省略
}
在这个UserController
中,我们定义了两个RESTful端点:一个用于获取特定ID的用户,另一个用于创建新用户。
请求参数和响应体
Spring MVC允许你通过注解来指定方法参数应如何绑定到HTTP请求,以及如何处理响应体。
@RequestParam
:用于将请求参数绑定到方法参数。@PathVariable
:用于将URI模板变量绑定到方法参数。@RequestBody
:用于将HTTP请求体绑定到方法参数。@ResponseBody
:用于将方法返回值绑定到HTTP响应体(在@RestController
中隐式使用)。
示例:请求参数和响应体
import org.springframework.web.bind.annotation.*;
@RestController
public class CalculatorController {
@GetMapping("/add")
public double add(@RequestParam double a, @RequestParam double b) {
return a + b;
}
@PostMapping("/subtract")
public double subtract(@RequestBody CalculationRequest request) {
return request.getA() - request.getB();
}
// 更多的请求处理方法...
}
class CalculationRequest {
private double a;
private double b;
// getter和setter省略
}
在CalculatorController
中,add
方法使用@RequestParam
接收两个查询参数,subtract
方法使用@RequestBody
接收一个JSON格式的请求体。
通过以上的注解和方法,Spring Boot提供了一个强大且灵活的方式来创建和管理RESTful服务。开发者可以轻松定义端点、处理各种类型的请求,并生成丰富的响应。