Java
REST-контроллер на Spring Boot
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);
}
}