Chaturmind
LearnDSASystem DesignBlogPremium
Sign inGet started
Chaturmind

Structured learning paths for engineers who want to go deep. Written by practitioners.

Learn

  • Java
  • DSA
  • System Design
  • Spring Boot
  • AI / ML

Company

  • Blog
  • Premium
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 Chaturmind. All rights reserved.

Built for engineers who want to go deep.


← Spring Boot REST API Development

Spring Boot Basics

  • What is Spring Boot?
  • Dependency Injection
  • Building REST Controllers

Validation & Error Handling

  • Bean Validation with @Valid
  • Global Exception Handling

Data & Persistence

  • Spring Data MongoDB
Chaturmind
← Spring Boot REST API Development

Spring Boot Basics

  • What is Spring Boot?
  • Dependency Injection
  • Building REST Controllers

Validation & Error Handling

  • Bean Validation with @Valid
  • Global Exception Handling

Data & Persistence

  • Spring Data MongoDB
HomeLearnSpring BootSpring Boot REST API DevelopmentSpring Boot Basics
✓ FreeBeginner· 10 min read

Building REST Controllers

@RestController, path variables, request bodies — build clean REST endpoints.

Published February 5, 2025


Building REST Controllers

Basic Controller

@RestController
@RequestMapping("/api/v1/products")
public class ProductController {

    private final ProductService productService;

    public ProductController(ProductService productService) {
        this.productService = productService;
    }

    @GetMapping
    public List<ProductDto> getAllProducts() {
        return productService.findAll();
    }

    @GetMapping("/{id}")
    public ProductDto getProduct(@PathVariable String id) {
        return productService.findById(id);
    }

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public ProductDto createProduct(@RequestBody @Valid CreateProductRequest request) {
        return productService.create(request);
    }

    @PutMapping("/{id}")
    public ProductDto updateProduct(@PathVariable String id,
                                    @RequestBody @Valid UpdateProductRequest request) {
        return productService.update(id, request);
    }

    @DeleteMapping("/{id}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void deleteProduct(@PathVariable String id) {
        productService.delete(id);
    }
}

Request parameters

// GET /products?category=electronics&page=0&size=20
@GetMapping
public Page<ProductDto> getProducts(
        @RequestParam(required = false) String category,
        @RequestParam(defaultValue = "0") int page,
        @RequestParam(defaultValue = "20") int size) {
    return productService.findAll(category, PageRequest.of(page, size));
}

ResponseEntity for full control

@GetMapping("/{id}")
public ResponseEntity<ProductDto> getProduct(@PathVariable String id) {
    return productService.findById(id)
        .map(ResponseEntity::ok)
        .orElse(ResponseEntity.notFound().build());
}

HTTP Methods → CRUD

HTTP MethodActionStatus
GETRead200 OK
POSTCreate201 Created
PUTReplace200 OK
PATCHPartial update200 OK
DELETEDelete204 No Content

Interview Tip

Be able to explain the difference between @Controller and @RestController: @RestController is @Controller + @ResponseBody — it automatically serialises return values to JSON instead of resolving them as view names.

Previous

Dependency Injection

Next

Bean Validation with @Valid

AI Tutor

Lesson: Building REST Controllers

Quick actions

AI responses can be inaccurate. Verify critical information.