Skip to content

Latest commit

 

History

History
86 lines (69 loc) · 2.86 KB

File metadata and controls

86 lines (69 loc) · 2.86 KB

Q07 — Annotations Used for Writing an API

Interview Tip: Walk through a real REST controller live. Explain what each annotation does as you type it — don't just list them.


💻 Code — Full REST Controller (Run Live)

@RestController                          // @Controller + @ResponseBody
@RequestMapping("/api/users")            // base path for all endpoints
public class UserController {

    @Autowired
    private UserService userService;

    // GET all users
    @GetMapping
    public ResponseEntity<List<User>> getAllUsers() {
        return ResponseEntity.ok(userService.getAllUsers());
    }

    // GET by ID
    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        return ResponseEntity.ok(userService.getUserById(id));
    }

    // POST - create
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody @Valid User user) {
        User saved = userService.save(user);
        return ResponseEntity.status(HttpStatus.CREATED).body(saved);
    }

    // PUT - update
    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id,
                                           @RequestBody User user) {
        return ResponseEntity.ok(userService.update(id, user));
    }

    // DELETE
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.delete(id);
        return ResponseEntity.noContent().build();
    }

    // Query param: /api/users/search?name=dip
    @GetMapping("/search")
    public ResponseEntity<List<User>> search(@RequestParam String name) {
        return ResponseEntity.ok(userService.findByName(name));
    }
}

📌 Annotation Quick Reference

Annotation Purpose
@RestController Marks class as REST controller, returns JSON by default
@RequestMapping Base URL mapping for the class
@GetMapping Handle HTTP GET
@PostMapping Handle HTTP POST
@PutMapping Handle HTTP PUT
@DeleteMapping Handle HTTP DELETE
@PatchMapping Handle HTTP PATCH (partial update)
@PathVariable Extracts value from URI path /{id}
@RequestParam Extracts query param ?name=value
@RequestBody Maps JSON body to Java object
@ResponseBody Converts return value to JSON (included in @RestController)
@Valid Triggers bean validation on request body
@ResponseStatus Set HTTP response status on method/exception

🔑 Key Points

  • @RestController = @Controller + @ResponseBody combined
  • @RequestBody deserializes JSON → Java object (via Jackson)
  • @PathVariable → from URL path, @RequestParam → from query string
  • ResponseEntity<T> gives full control over status code + body + headers
  • Always use @Valid with @RequestBody to trigger validation annotations like @NotNull, @Size