@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return user != null ?
ResponseEntity.ok(user) :
ResponseEntity.notFound().build();
}
@PostMapping
public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
User savedUser = userService.save(user);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}").buildAndExpand(savedUser.getId());
return ResponseEntity.created(location).body(savedUser);
}
}
1.3 高级技巧
HATEOAS 实现(响应中嵌入资源链接):
java复制代码
@GetMapping("/{id}/orders")
public CollectionModel<Order> getUserOrders(@PathVariable Long id) {
List<Order> orders = orderService.findByUserId(id);
Link selfLink = linkTo(methodOn(UserController.class).getUserOrders(id)).withSelfRel();
return CollectionModel.of(orders, selfLink);
}
@RestController // = @Controller + @ResponseBody
public class ApiController {
@GetMapping("/city/{id}")
public City getCity(@PathVariable int id) {
return cityService.findById(id);
}
}
4.2 序列化控制
java复制代码
@Data
public class Product {
@JsonIgnore
private String internalCode; // 不序列化
@JsonFormat(pattern = "yyyy-MM-dd")
private Date createTime; // 日期格式化
}