Какие использовал аннотации с @RestController
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Аннотации с @RestController
@RestController — это аннотация Spring Framework, которая комбинирует функционал @Controller и @ResponseBody. Она используется для создания REST API эндпоинтов. Вот основные аннотации, которые я использовал:
1. @RequestMapping
Основная аннотация для маппирования HTTP запросов на методы контроллера.
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@RequestMapping(method = RequestMethod.GET, path = "/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
}
2. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping
Укороченные версии @RequestMapping для конкретных HTTP методов:
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping
public User createUser(@RequestBody UserCreateRequest request) {
return userService.create(request);
}
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody UserUpdateRequest request) {
return userService.update(id, request);
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.delete(id);
}
}
3. @PathVariable
Извлекает переменную из пути URL:
@GetMapping("/users/{id}/posts/{postId}")
public Post getUserPost(
@PathVariable Long id,
@PathVariable Long postId
) {
return postService.findByIdAndUserId(postId, id);
}
4. @RequestParam
Извлекает параметры из query string:
@GetMapping("/users")
public Page<User> listUsers(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(required = false) String name
) {
return userService.findAll(name, PageRequest.of(page, size));
}
// Запрос: GET /users?page=1&size=20&name=John
5. @RequestBody
Десериализует JSON из тела запроса в объект Java:
@PostMapping
public UserResponse createUser(@RequestBody UserCreateRequest request) {
return userService.create(request);
}
public class UserCreateRequest {
private String name;
private String email;
private String phone;
// getters/setters
}
6. @RequestHeader
Извлекает значение из заголовков HTTP:
@GetMapping("/secure")
public String getData(@RequestHeader("Authorization") String token) {
return userService.getSecureData(token);
}
7. @Valid и @Validated
Включают валидацию входных данных с использованием Bean Validation:
@PostMapping
public UserResponse createUser(@Valid @RequestBody UserCreateRequest request) {
return userService.create(request);
}
public class UserCreateRequest {
@NotBlank(message = "Name is required")
private String name;
@Email(message = "Email should be valid")
private String email;
@Size(min = 10, max = 20, message = "Phone must be 10-20 digits")
private String phone;
}
8. @CrossOrigin
Разрешает CORS запросы с других доменов:
@RestController
@RequestMapping("/api/v1/users")
@CrossOrigin(origins = "http://localhost:3000", maxAge = 3600)
public class UserController {
// ...
}
9. @ExceptionHandler
Обрабатывает исключения и возвращает нужный HTTP статус:
@RestController
public class UserController {
@ExceptionHandler(UserNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ErrorResponse handleUserNotFound(UserNotFoundException e) {
return new ErrorResponse("User not found", e.getMessage());
}
}
10. @ResponseStatus
Устанавливает HTTP статус код ответа:
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public UserResponse createUser(@RequestBody UserCreateRequest request) {
return userService.create(request);
}
Типичный пример REST контроллера
@RestController
@RequestMapping("/api/v1/posts")
@RequiredArgsConstructor
public class PostController {
private final PostService postService;
@GetMapping
public Page<PostResponse> getPosts(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size
) {
return postService.findAll(PageRequest.of(page, size));
}
@GetMapping("/{id}")
public PostResponse getPost(@PathVariable Long id) {
return postService.findById(id);
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public PostResponse createPost(@Valid @RequestBody CreatePostRequest request) {
return postService.create(request);
}
@PutMapping("/{id}")
public PostResponse updatePost(
@PathVariable Long id,
@Valid @RequestBody UpdatePostRequest request
) {
return postService.update(id, request);
}
@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deletePost(@PathVariable Long id) {
postService.delete(id);
}
}
Эти аннотации составляют основу REST API разработки в Spring. Они обеспечивают лаконичный и стандартизированный способ создания эндпоинтов.