[스프링부트]어노테이션

gov's avatar
Nov 14, 2024
[스프링부트]어노테이션
💡
Annotation
자바Annotaion(@)은 다른 프로그램에 유용한 정보를 제공하는 주석과 같은 의미 가지는 기능
예외처리
  • try 예외 발생 가능성이 있는 코드를 감싸고, 예외 발생 시 프로그램 흐름 제어
  • throw 특정 상황에서 개발자가 의도적으로 예외를 발생시킴
메서드 이름 몰라도 Router가 경로에 맞는 메서드를 찾아 실행
  • path 값이 경로에 해당하는 메서드 찾아 호출
  • Method 클래스와 invoke() 메서드를 사용해 메서드 동적 호출

예시 코드

package ex02; import java.util.Scanner; public class App { public static void main(String[] args) { Router router = new Router(new UserController()); // 객체 생성 Scanner sc = new Scanner(System.in); String path = sc.nextLine(); router.routing(path); } }
1차 개발자 작성 코드: RequestMapping, Router
package ex02; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) // 메서드 위에만 사용 @Retention(RetentionPolicy.RUNTIME) // 언제까지? -런타임까지 public @interface RequestMapping { // RequestMapping -어노테이션 이름 String value(); // 키값이 value인 메서드 }
package ex02; import java.lang.reflect.Method; public class Router { UserController uc; public Router(UserController uc) { this.uc = uc; } // path값 -App에서 사용자가 입력 public void routing(String path) { // 1. 메서드 찾기 Method[] methods = uc.getClass().getMethods(); // 캡슐화 -모든 메서드를 리턴 // 2. 어노테이션 체크 // 무엇을 하는지 이해 -'어노테이션 찾는 방법' for(Method m : methods) { RequestMapping rm = m.getAnnotation(RequestMapping.class); // 메서드에 어노테이션 있는지 확인 // 3. value와 path 일치 확인해서 일치하면 invoke 하기 if(rm == null) break; // 없으면 종료 if (rm.value().equals(path)) { try { // 동일하면 invoke(호출) -메서드 이름 몰라도 호출 가능 m.invoke(uc); } catch (Exception e) { throw new RuntimeException("메서드 실행중 오류 발생"); } } } } }
2차 개발자 작성 코드: UserController Router 을 보고 작성
package ex02; publicass UserController { @RequestMapping("/login") public void login() { System.out.println("로그인"); } @RequestMapping("/join") public void join() { System.out.println("회원가입"); } @RequestMapping("/logout") public void logout() { System.out.println("로그아웃"); } @RequestMapping("/userinfo") public void userinfo() { System.out.println("유저정보"); } }

@RestController

  • @Controller@ResponseBody를 결합한 어노테이션
  • @Controller 요청을 처리하는 일반적인 컨트롤러 @ResponseBody 메서드의 반환 값을 HTTP 응답 본문(body)에 매핑
@RestController가 붙은 클래스 내의 메서드는 뷰를 반환하는 대신 데이터를 반환하며, 반환 데이터는 JSON 형식으로 변환

예시 코드

package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/home") public String home() { // RestController 요청되는 값 그대로 응답 return "<h1>Hello World</h1>"; } }

출력

notion image
Share article

goho