[Spring] Spring MVC, Controller

Jiwoo·2024년 5월 28일
0

Spring

목록 보기
1/19
post-thumbnail
post-custom-banner

📌 Spring MVC

  • Model: 데이터와 비즈니스 로직
  • View: 사용자 인터페이스
  • Controller: Model과 View 사이의 상호작용 조정, 제어

→ SW를 구성하는 요소들을 분리해 코드의 재사용성과 유지 보수성 높이고, 개발자들 간의 협업 용이하게 한다.

📌 Front Controller

DispatcherServlet을 사용해 Front Controller 패턴 방식으로 API 요청 효율적으로 처리

📌 Controller

@Controller
@RequestMapping("/user")
public class UserController {
	@GetMapping("/login")
	public String login() {
	    // ...
	}

  @GetMapping("/logout")
  public String logout() {
      // ...
  }

	@GetMapping("/signup")
	public String signup() { 
		// ... 
	}
	
	@PostMapping("/signup")
  public String registerUser(SignupRequestDto requestDto) {
		// ... 
	}
}
  • @Controller는 해당 클래스가 Controller의 역할을 수행할 수 있도록 등록해줄 수 있다.

@RequestMapping

  • 중복되는 URL을 단축시켜줄 수 있다.
@Controller
@RequestMapping("/api")
public class HelloController {
    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello World!";
    }

    @GetMapping("/get")
    @ResponseBody
    public String get() {
        return "GET Method 요청";
    }

    @PostMapping("/post")
    @ResponseBody
    public String post() {
        return "POST Method 요청";
    }

    @PutMapping("/put")
    @ResponseBody
    public String put() {
        return "PUT Method 요청";
    }

    @DeleteMapping("/delete")
    @ResponseBody
    public String delete() {
        return "DELETE Method 요청";
    }
}

📌 동적 페이지 처리

private static long visitCount = 0;

...

@GetMapping("/html/dynamic")
public String htmlDynamic(Model model) {
    visitCount++;
    model.addAttribute("visits", visitCount);
    return "hello-visit";
}
  • Client의 요청을 Controller에서 Model로 처리

📌 데이터를 Client에 반환하는 방법

  • 반환값: String 외 자바 클래스

http://localhost:8080/response/json/class

@GetMapping("/response/json/class")
@ResponseBody
public Star helloClassJson() {
    return new Star("Robbie", 95);
}
  • 자바 객체 → JSON 으로 변환
  • Spring에서 자동으로 Java의 객체를 JSON으로 변환해준다.

@RestController = @Controller + @ResponseBody

  • 해당 클래스의 모든 메서드에 @ResponseBody 애너테이션이 추가되는 효과 부여
post-custom-banner

0개의 댓글