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");}@PostMappingpublic 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服务。开发者可以轻松定义端点、处理各种类型的请求,并生成丰富的响应。