ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL 44th day
    TIL(Today I Learned) 2021. 12. 5. 17:37

    ResponseBody

    • RestController와 유사한 기능
    • HTTP 메시지 바디에 return 값을 출력해줌.

    RequestParam

    • parameter 설정을 지원하는 어노테이션
    • request.getParameter와 같은 기능을 함
    • 요청 파라미터와 변수명이 같고, String, int, Integer 등 단순 타입일 시에 RequestParam을 선언하지 않아도 사용 가능

    Required

    • 필수 값 true or false
    • Required = true여도 ''(빈문자)는 들어갈 수 있으므로 주의해야한다.

    Integer와 int의 차이

    • int는 기본형이기 때문에 null이 들어갈 수 없다. (대신에 '0'이 들어감)(500 예외 발생)
    • Integer는 객체형이기 때문에 Null 값이 들어갈 수 있다.

    DefaultValue

    • 파라미터 값이 전달되지 않았을 때, 기본 값인 defaultvalue를 넘겨주는 기능(사용자가 설정)
    • defaultvalue 설정 시, 사실상 required는 무의미해진다.
    • 빈 문자를 넘겨준 경우에도 defaultvalue 값을 넘겨준다.

    RequestParamMap

    • 파라미터를 Map이나 MultiValueMap으로 사용할 수 있다.
    • Map은 키 값이 하나로 확실할 때 사용
    • MultiValueMap은 키 값이 여러개 일 때 사용한다.(해쉬함수)
      • 일반적으로 파라미터 값은 하나만 쓴다.

    ModelAttribute

    • 실제 개발에서의 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체 안에 값을 넣어줘야 하는 번거로운 과정을 생략하게 해주는 어노테이션
    • 모델 객체를 자동으로 생성하고, 요청 파라미터 값도 전부 자동으로 포함시켜준다.
    • 요청 파라미터 이름에 해당하는 객체의 프로퍼티를 찾고 setter를 호출해서 파라미터에 값을 입력(바인딩) 한다.
      • 예를 들어) 파라미터 이름이 username이면 setUsername() 메서드를 찾고, 호출하면서 값을 입력한다.
    • 참고) ModelAttribute를 생략할 수도 있다.
      • @RequestParam과 어떻게 구별할까?
        • @RequestParam은 String, int, Integer와 같읕 단순 타입일 때
        • 나머지 = @ModelAttribute(argument resolver로 지정해둔 타입 외)(argument resolver는 HttpServletResponse와 같은 것)

    lombok

    • getter, setter 지원
    • toString 기능 지원
      • 객체를 toString으로 찍히게 해주는 기능

    객체의 Property

    • 여기서 프로퍼티는 set.xxx, get.xxx를 의미
      • 프로퍼티 값을 변경하면 set.xxx
        • 프로퍼티 값을 호출하면 get.xxx

    단순 텍스트 요청 메시지

    • InputStream으로 메시지 바디를 직접 보여줄 수 있다(바이트코드 -> String 형식으로 변환해줌).
    • OutputStream 또는 Writer로 메시지 바디에 직접 출력할 수 있다.
    • HttpEntity<>를 이용해서 자동으로 메시지 바디 text를 문자로 바꿔서 보여줌
      • 반환(응답)도 가능(Writer기능)
      • HTTP Header 또는 body를 간편하게(직접) 조회해준다.
      • view 조회 x(RestController)
      • RequestEntity<>로 사용 가능, ResponseEntity(응답)에는 상태 코드 삽입 가능
    • @RequestBody를 이용해서 HTTP 메시지 바디를 조회할 수 있도록 해준다.(가장 많이 사용)
      • 참고) header 정보가 필요하다면 Entity<>를 사용 또는 @RequestHeader 사용
    • @ResponseBody를 이용해 메시지 바디에 직접 응답할 수 있다.
    • Http 메시지 바디를 조회하거나 직접 응답하는 것은 당연하게도 요청 파라미터를 조회하는 @RequestParam 또는 @ModelAttribute와는 전혀 관계가 없다.(파라미터로 요청하거나 값이 저장되는 것이 전혀 아니기 때문)

    InputStream

    • 바이트코드로 넘어가기 때문에 문자 변환 형식을 지정해줘야한다(UTF-8과 같은)(지정하지 않을 경우 기본 값으로 변환됨(권장 x))

    요청 파라미터 vs HTTP 메시지 바디

    • 요청 파라미터를 조회하는 기능 : @RequestParam, @ModelAttirbute
    • HTTP 메시지 바디를 직접 조회하는 기능 @RequestBody
      • 응답 @ResponseBody

    RequestBody

    • @RequestBody에 직접 만든 객체를 지정할 수 있다.
      • HTTP 메시지 컨버터가 HTTP 메시지 바디의 내용을 우리가 원하는 문자나 객체로 변환해준다.
      • HTTP 메시지 컨버터는 문자 뿐만 아니라 JSON도 객체로 변환해준다.(맵핑해주는 과정 생략해줌)
    • 생략 x(생략은 @RequestParam 또는 @ModelAttribute만 가능하다.)
    • 이때 생성(지정)된 객체는 응답에도 데이터 형식으로(json) 반환 가능(HTTP 메시지 컨버터 사용)
    • 정리) @RequestBody 요청
      • Json 요청 -> HTTP 메시지 컨버터(josn을 처리하는, Accept : application/json) -> 객체
    • @ResponseBody 응답
      • 객체 -> HTTP 메시지 컨버터 -> Json 응답

    GET, POST, HTTP API차이

    • GET과 POST는 요청 파라미터를 통해 값을 조회하거나 저장하는데 반면,
    • HTTP API는 메시지 바디에 데이터를 요청하거나 응답받는 방식이므로 어노테이션 사용이 다르다.
    • GET과 POST는 @RequestParam 또는 @ModelAttribute를 사용
    • HTTP API는 @RequestBody 또는 @ResponseBody 사용 (HttpEntity도 사용 가능)

    Generic이란

    • 특정 타입을 지정하지 않고 외부에서 지정하는 타입을 자동 지정해주는 기능
    • 때문에 관리하기가 편하다.

    'TIL(Today I Learned)' 카테고리의 다른 글

    TIL 46th day  (0) 2021.12.07
    TIL 45th day  (0) 2021.12.06
    TIL 43th day  (0) 2021.12.05
    TIL 41th day  (0) 2021.12.01
    TIL 40th day  (0) 2021.11.30
Designed by Tistory.