요르딩딩
Controller에 대해 알아보자 본문
1. @Controller vs @RestController
@Controller는주로 View를 반환하고, @RestController는 주로 Data를 반환합니다.
⇒ 즉, 역할을 구분따져보면 @Contoller(view) + @Responsebody(data) = @RestContoller(view+data)라고 생각하면 됩니다.
@Controller와 @RestController의 차이는 용도에 따른 차이입니다.
예전에는 백엔드에서도 @Controller를 사용하여 jsp나 html과 같은 View를 전달해 주었기 때문에 사용해 왔지만,
최근에는 프론트엔드, 백엔드를 따로두고, @RestController를 백엔드에서 json으로 Data만 편리하게 전달하기위해 사용합니다.
⇒ 즉, Rest API에서는@controller @restcontroller 선언한 두 개의 클레스 만들고,
@Controller 클레스는 view만 처리하고@Restcontroller 클레스는 Data 처리에 사용한다고 생각하면 될거 같습니다.
@ResponseBody
⇒ View 조회를 무시하고, HTTP message body에 직접 해당 내용을 입력
참고 : https://hyeounstory.tistory.com/62?category=849984
2. Restful (REpresentational State Transfer)
RESTful API는 HTTP 통신에서 어떤 차원에 대한 CRUD 요청을 Resource와 Method로 표현하여,
특정한 형태로 전달하는 방식입니다.
⇒ [구성]
- Resource(자원, URI)
- Method(요청 방식, GET or POST 등)
- Representation of Resource(자원의 형태, JSON or XML 등)
@Requestmapping
@RequestMapping은 http request로 들어오는 url을 특정 controller 클래스나 메소드로 매핑(연결)시키는 역할을 합니다.
(@RequestMapping은 controller에 있어서 class에 적용할수도 있고 특정 method에 적용할수도 있습니다.)
⇒ 클래스 레벨에 매핑 정보를 두면 메서드 레벨에서 해당 정보를 조합해서 사용합니다.
⇒ 대부분의 속성을 배열[]로 제공하기에 다중 설정도 가능합니다.
(ex: {"/hello", "/hello-world"})
⇒ method 속성으로 HTTP 메서드를 지정하지 않으면 모든 메서드에 무관하게 호출됩니다.
(GET, HEAD, POST, PATCH, DELETE)
GetMapping, PostMapping, PatchMapping, DeleteMapping등 이름에 의미를 부여해 더 직관적으로 사용할 수 있습니다.
⇒ 어노테이션 내부에는 @RequestMapping과 method를 미리 지정돼 있는것입니다.
@RequestParam
@RequestParam 을 사용하면 getParameter 메소드를 통해 꺼내는 대신, 매개변수 레벨에서 더 빠르게 바로 꺼내 사용할 수 있다.
ResponseEntity<?>
ResponseEntity 는 헤더와 바디, 상태 코드로 구성되어 있고 http 응답을 나타낼 때 사용 합니다.
Http 응답을 편하게 구성하여 보낼 떄 사용 하는 클래스 이다.
@PathVariable
최근 HTTP API는 리소스 경로에 식별자(파라미터)를 넣는 스타일을 선호한다고 합니다.
⇒ 추출할 url depth에 중괄호({})를 감싸서 매핑할 수 있습니다. ( @GetMapping("/testurl/{type}/{id}"))
⇒ 하나 이상의 PathVariable도 사용이 가능하다.
쿼리 스트링
쿼리 파라미터라고도 부른다. 주로 URL 끝에 붙여져 있다.
⇒ 검색 사이트에 ?query=XXX 라든지, ?redirect=URL 이런 것이 쿼리 스트링이다.
@RequestParam.required
⇒ 파라미터 필수 여부
⇒ 기본값은 파라미터 필수 (true)입니다.
public String requestParamRequired(@RequestParam(required = true) String username, @RequestParam(required = false) Integer age)
- 해당 파라미터를 공백(ex: username=)으로 전송하면 빈 문자로 통과된다.
- required가 true인 파라미터를 보내주지 않으면 400 예외(BAD_REQUEST)가 발생한다.
- 원시타입은 null이 들어갈 수 없어서 required가 false여도 500에러가 발생한다.
⇒ int형으로 에러가 발생하면 Integer같은 wrapper 타입을 사용해야 한다.
⇒ 혹은 기본값을 설정해주는 defaultValue를 사용하면 된다.
@RequestParamController.requestParamDefault
파라미터가 없는 경우 기본값으로 설정한 값이 적용된다.
이미 기본값이 있기에 required는 의미가 없어 빼도 된다.
빈 문자("")의 경우에도 설정한 기본 값이 적용 된다.
public String requestParamDefault(@RequestParam(defaultValue = "catsbi") String username)
URI = URL + URN
참고 : https://hoyeonkim795.github.io/posts/rest_api/
@Autowired
- @를 이용한 주석, 자바코드에 주석을 달아 특별한 의미를 부여한 것
- 컴파일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공, 코드에 정보를 추가하는 정형화된 방법.
[용도]
- @Override 어노테이션처럼 컴파일러를 위한 정보를 제공하기 위한 용도
- 스프링 프레임워크의 @Controller 어노테이션처럼 런타임에 리플렉션을 이용해서 특수 기능을 추가하기 위한 용도
- 컴파일 과정에 어노테이션 정보로부터 코드를 생성하기 위한 용도
출처: https://sjh836.tistory.com/8 [빨간색코딩]
HttpServletRequest + RequestUtil.paramToHashMap(param)
'[Web] > [Spring]' 카테고리의 다른 글
context-common.xml 에 대해 알아보자 (0) | 2021.09.15 |
---|---|
context-*.xml 에 대해 알아보자 (1) (0) | 2021.09.13 |
[Spring 분석] (No.3) Jar, War, Ear란 (0) | 2021.09.06 |
[Spring 분석] (No.2)Bean, Application Context(Bean Factory)란 (0) | 2021.09.01 |
[Spring 분석] (No.1) MVC 패턴이란 (0) | 2021.09.01 |