← Назад к вопросам

Какие использовал аннотации с @RestController

2.3 Middle🔥 191 комментариев
#REST API и микросервисы#Spring Boot и Spring Data#Spring Framework

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Аннотации с @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. Они обеспечивают лаконичный и стандартизированный способ создания эндпоинтов.

Какие использовал аннотации с @RestController | PrepBro