1. @ResponseBody
<클라이언트와 서버의 비동기 통신>
- 클라이언트에서 서버로 통신하는 메시지를 요청(request) 메시지라고 하며, 서버에서 클라이언트로 통신하는 메시지를 응답(response) 메시지라고 한다.
- 즉, 요청본문 requestBody, 응답본문 responseBody를 담아서 보내야 한다.
더 알아보기
- 자바 객체를 HTTP 요청의 바디 내용으로 매핑하여 클라이언트로 전송한다. @ResponseBody가 붙은 파라미터가 있으면 HTTP 요청의 미디어타입과 파라미터의 타입을 먼저 확인한다.
- 즉, @ResponseBody 어노테이션을 이용하면 http 요청 body를 자바 객체로 전달받을 수 있다.
2. controller method return type
1) String
- 흔히 사용하는 타입
- Model 안에 데이터를 key, value 값으로 담고, return 타입을 String 값으로 뷰의 이름을 지정해주면 뷰로 데이터가 전송되게 된다. 뷰에서는 해당 데이터의 key값을 객체 이름으로 하여 그 안에 데이터를 조회한다.
2) void
- spring이 해당 url을 보고 뷰 네임을 자동으로 결정하는 기능 제공한다. 스프링 설정 파일에 RequestToViewNameTranslator 빈이 존재하지 않을 경우, 기본적으로 DeafultRequestToViewNameTranslator 구현체를 사용한다. 이 클래스는 요청 url에서 제일 앞의 '/'와 확장자를 제외한 나머지 부분을 뷰 네임으로 지정하게 된다.
-> 위 예제에서는 test/address가 뷰 네임으로 지정되게 된다.
3) ModelAndView
- ModelAndView는 Model과 View를 동시에 설정가능한 객체이다. Controller는 ModelAndView 객체만을 반환하지만 Model과 View 모두를 가지고 반환한다. 생성자로 뷰의 이름을 저장하거나 setViewName() 메서드를 사용하여 뷰 네임을 지정하고, addObject() 메서드로 데이터를 저장한다.
3. DTO
-> 추가하기_
4. @RequestBody
- @RequestBody이 붙은 파라미터에는 http 요청의 본문이 그대로 전달된다. 일반적으로 GET/POST의 요청 파라미터라면 @RequestBody를 사용할 일이 없을 것이다. 반면, xml이나 json 기반의 메시지를 사용하는 요청의 경우에 이 방법이 매우 유용하다.
5. @PathVariable
- @PathVariable의 이름과 url의 괄호 안의 이름이 같은 경우 data에 해당 값을 저장한다.
- @PathVariable의 이름과 파라미터의 이름이 같으면 생략 가능하다.
- @PathVariable을 다중으로도 사용 가능하다.
<스프링을 사용한 웹 애플리케이션에 적용할 수 있는 대표적 예외 처리 방법인 @ExceptionHandler, @ControllerAdvice>
6. @ExceptionHandler
https://tecoble.techcourse.co.kr/post/2023-05-03-ExceptionHandler-ControllerAdvice/
-> 뭔 말이지..
-
@ExceptionHandler 어노테이션을 사용하면 value로 원하는 예외를 지정하고 이를 핸들링할수 있다.
-
@ExceptionHandler는 코드를 작성한 컨트롤러에서만 발생하는 예외만 처리됩니다. 만약 같은 예외에 대해 여러 컨트롤러에서 같은 처리를 하고 싶다면 컨트롤러마다 같은 메서드를 작성해 주어야만 합니다. -> 즉, 코드의 중복이 발생할 수밖에 없습니다.
-
@ExceptionHandler({ Exception1.class, Exception2.class}) 이런식으로 두 개 이상 등록도 가능하다.
7. @ControllerAdvice
- @ExceptionHandler가 하나의 클래스에 대한 것이라면, @ControllerAdvice는 모든 @Controller 즉, 전역에서 발생할 수 있는 예외를 잡아 처리해주는 annotation이다.
- 위와 같이 새로운 클래스파일을 만들어서 annotation을 붙이기만 하면 된다. 그 다음에 @ExceptionHandler로 처리하고 싶은 예외를 잡아 처리하면 된다. (@ControllerAdvice가 전역을 포괄하기 때문에 @ExceptionHandler 적용이 가능한 것!)
출처:
https://cheershennah.tistory.com/179
https://www.youtube.com/watch?v=Zdf6LGtkjD4
https://ooeunz.tistory.com/101
https://tristy.tistory.com/54
https://dangdangee.tistory.com/entry/Spring-PathVariable-%EC%82%AC%EC%9A%A9%EB%B2%95
https://tecoble.techcourse.co.kr/post/2023-05-03-ExceptionHandler-ControllerAdvice/
https://jeong-pro.tistory.com/195