learn/spring

어노테이션(Annotation) - Spring MVC 관련

사겅이 2023. 9. 26. 06:58

@Controller

클래스를 컨트롤러로 지정하고 컨트롤러는 클라이언트의 요청을 처리하고 응답을 생성

@Controller
public class MyController {
    // Controller methods here
}

 

@RequestMapping

요청 URL과 메서드를 매핑하여 특정 URL에 대한 요청을 처리할 메서드를 지정

@Controller
@RequestMapping("/myapp")
public class MyController {
    @RequestMapping("/home")
    public String home() {
        return "index";
    }
}

 

@GetMapping / @PostMapping

HTTP GET 및 POST 요청에 대한 처리를 정의

@Controller
@RequestMapping("/myapp")
public class MyController {
    @GetMapping("/view")
    public String view() {
        return "myview";
    }

    @PostMapping("/submit")
    public String submit() {
        return "result";
    }
}

 

@RequestParam

요청 파라미터를 메서드 매개변수로 바인딩

@GetMapping("/user")
public String getUser(@RequestParam("id") int userId) {
    // Logic to retrieve user by userId
}

 

@RequestPart

Multipart/form-data 요청에서 개별 부분(part)을 메서드의 매개변수에 바인딩하는 데 사용
파일 업로드와 관련이 있으며, 멀티파트 요청에서 업로드한 파일 또는 다른 파트(part) 데이터를 추출할 때 사용

@PostMapping("/upload")
public String handleFileUpload(@RequestPart("file") MultipartFile file) {
    // 업로드한 파일을 처리하는 코드
    return "File uploaded successfully!";
}

 

@PathVariable

URL 경로의 일부를 매개변수로 바인딩

@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") int userId) {
    // Logic to retrieve user by userId
}

 

@ModelAttribute

모델 객체를 컨트롤러 메서드에 바인딩

@PostMapping("/save")
public String saveUser(@ModelAttribute("user") User user) {
    // Logic to save user
}

 

@RequestHeader

HTTP 요청 헤더의 값을 메서드의 매개변수로 바인딩하는데 사용
특정 헤더 값을 추출하여 컨트롤러 메서드 내에서 사용

@Controller
public class MyController {

    @GetMapping("/user-agent")
    public String getUserAgent(@RequestHeader("User-Agent") String userAgent) {
        // userAgent 변수에 User-Agent 헤더의 값을 가져옴
        return "User-Agent: " + userAgent;
    }
}

 

@ResponseBody

컨트롤러 메서드의 반환 값을 HTTP 응답 본문으로 사용

@GetMapping("/api/data")
@ResponseBody
public List<Data> getData() {
    // Logic to fetch data
}

 

@CookieValue

HTTP 쿠키의 값을 컨트롤러 메서드의 매개변수로 바인딩할 때 사용
클라이언트가 전송한 쿠키의 값을 쉽게 추출

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MyController {

    @GetMapping("/getCookieValue")
    public String getCookieValue(@CookieValue(name = "userName", defaultValue = "Guest") String userName) {
        // @CookieValue 어노테이션을 사용하여 쿠키의 값을 매개변수로 바인딩합니다.
        // "userName"은 쿠키의 이름을 나타내며, defaultValue는 쿠키가 없을 경우 사용할 기본값을 설정합니다.

        // userName 변수에는 쿠키 "userName"의 값이 할당됩니다.

        if ("Guest".equals(userName)) {
            return "Welcome, Guest!";
        } else {
            return "Welcome, " + userName + "!";
        }
    }
}

 

@CrossOrigin 

Cross-Origin Resource Sharing (CORS)를 지원

웹 애플리케이션의 RESTful API나 컨트롤러 메서드에 대한 다른 도메인에서의 HTTP 요청을 허용하거나 구성

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @GetMapping("/api/data")
    @CrossOrigin(origins = "http://example.com", maxAge = 3600) // 특정 도메인에서의 요청 허용
    public String getApiData() {
        return "This is API data";
    }
}

 

@SessionAttributes

세션에 속성을 저장하고 관리

세션에 데이터를 유지하고 여러 HTTP 요청 간에 공유

@Controller
@SessionAttributes("myAttribute")
public class MyController {

    @GetMapping("/setSessionAttribute")
    public String setSessionAttribute(Model model) {
        model.addAttribute("myAttribute", "Hello, Session!");
        return "examplePage";
    }

    @GetMapping("/getSessionAttribute")
    public String getSessionAttribute(@ModelAttribute("myAttribute") String attribute) {
        // attribute 변수에 세션에서 가져온 데이터가 저장됩니다.
        return "resultPage";
    }
}

 

@Valid

폼 입력 및 데이터 전송 시 입력 데이터의 유효성을 검사

입력 데이터가 지정된 규칙과 제약 조건을 준수하는지 확인

@Controller
public class MyController {

    @PostMapping("/submitForm")
    public String submitForm(@Valid @ModelAttribute MyFormObject formObject, BindingResult result) {
        if (result.hasErrors()) {
            // 유효성 검사 에러 처리
            return "errorPage";
        }
        // 유효성 검사 통과 시 처리
        return "successPage";
    }
}

 

@InitBinder

웹 요청 파라미터의 데이터 바인딩을 커스터마이즈하고 검증
컨트롤러 클래스 내에 메서드로 정의되며, 특정 파라미터에 대한 바인딩 설정을 지정

@Controller
public class MyController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

    @GetMapping("/myForm")
    public String myForm(Model model) {
        model.addAttribute("myObject", new MyObject());
        return "myForm";
    }

    @PostMapping("/submitForm")
    public String submitForm(@ModelAttribute MyObject myObject) {
        // 이곳에서 myObject를 사용
        return "successPage";
    }
}

 

@ControllerAdvice

전역 예외 처리 및 모델 속성 설정을 위한 클래스

@ControllerAdvice
public class GlobalExceptionHandler {
    // Exception handling methods here
}

 

@ExceptionHandler(ExceptionClassName.class)

특정 예외 클래스(ExceptionClassName.class)에 대한 예외 처리를 정의

@Controller
public class MyController {

    @ExceptionHandler(MyCustomException.class)
    public ResponseEntity<String> handleCustomException(MyCustomException ex) {
        // 예외 처리 로직
        return new ResponseEntity<>("Custom Exception Handled", HttpStatus.BAD_REQUEST);
    }

    @GetMapping("/example")
    public ResponseEntity<String> example() {
        // 예외를 발생시키는 메서드
        throw new MyCustomException("Custom Exception Occurred");
    }
}