@RestController
是SpringMVC
注解。表示方法将返回的数据直接转换为HTTP响应体
发送给客户端,而无需额外配置视图解析器
@RestController
= @Controller
+ @ResponseBody
处理RESTful API请求
时,通常用 @RestController
注解来创建控制器类
,这类控制器返回的数据通常为JSON
、XML
或其他可序列化的格式。
创建一个基本的RESTful API控制器
import org.springframework.web.bind.annotation.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@RestController
@RequestMapping("/api/v1/products")
public class ProductController {
private final ProductService productService;
public ProductController(ProductService productService) {
this.productService = productService;
}
@GetMapping("/{id}")
public ResponseEntity<Product> getProduct(@PathVariable Long id) {
Product product = productService.findById(id);
if (product == null) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
return new ResponseEntity<>(product, HttpStatus.OK);
}
@PostMapping
public ResponseEntity<Product> createProduct(@RequestBody Product product) {
Product savedProduct = productService.save(product);
return new ResponseEntity<>(savedProduct, HttpStatus.CREATED);
}
@PutMapping("/{id}")
public ResponseEntity<Product> updateProduct(@PathVariable Long id, @RequestBody Product updatedProduct) {
// 确保请求中的ID与更新的产品对象匹配
updatedProduct.setId(id);
Product updated = productService.update(updatedProduct);
if (updated != null) {
return new ResponseEntity<>(updated, HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteProduct(@PathVariable Long id) {
boolean isDeleted = productService.deleteById(id);
if (isDeleted) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
}
使用@GetMapping和PathVariable实现资源列表查询
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/v1/customers")
public class CustomerController {
private final CustomerService customerService;
public CustomerController(CustomerService customerService) {
this.customerService = customerService;
}
// 获取所有客户
@GetMapping
public List<Customer> getAllCustomers() {
return customerService.getAllCustomers();
}
// 根据ID获取单个客户
@GetMapping("/{id}")
public ResponseEntity<Customer> getCustomer(@PathVariable Long id) {
Customer customer = customerService.getCustomerById(id);
if (customer == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(customer);
}
}
使用@PostMapping实现资源创建
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/v1/orders")
public class OrderController {
private final OrderService orderService;
public OrderController(OrderService orderService) {
this.orderService = orderService;
}
// 创建新订单
@PostMapping
public ResponseEntity<Order> createOrder(@RequestBody Order order) {
Order createdOrder = orderService.createOrder(order);
return ResponseEntity.created(URI.create("/api/v1/orders/" + createdOrder.getId()))
.body(createdOrder);
}
}