Java

REST-контроллер на Spring Boot

Algonexys · 07.08.2026 · 👁 0

CRUD-эндпоинты с валидацией, DTO, кодами ответа и обработчиком исключений.

Код

import jakarta.validation.Valid;
import jakarta.validation.constraints.*;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;

import java.net.URI;
import java.util.List;

record UserRequest(
    @NotBlank(message = "Имя обязательно")
    @Size(min = 2, max = 50) String username,

    @Email(message = "Некорректный email") @NotBlank String email,

    @Min(14) @Max(120) int age
) {}

record UserResponse(Long id, String username, String email) {}

@RestController
@RequestMapping("/api/users")
class UserController {

    private final UserService service;

    UserController(UserService service) {
        this.service = service;
    }

    @GetMapping
    List<UserResponse> list(@RequestParam(defaultValue = "0") int page,
                            @RequestParam(defaultValue = "20") int size) {
        return service.findAll(page, size);
    }

    @GetMapping("/{id}")
    UserResponse get(@PathVariable Long id) {
        return service.findById(id).orElseThrow(
            () -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Пользователь не найден"));
    }

    @PostMapping
    ResponseEntity<UserResponse> create(@Valid @RequestBody UserRequest request) {
        UserResponse created = service.create(request);
        return ResponseEntity.created(URI.create("/api/users/" + created.id())).body(created);
    }

    @DeleteMapping("/{id}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    void delete(@PathVariable Long id) {
        service.delete(id);
    }
}