DAY58(1) - 요청, 응답 정보 다루기

은나현·2023년 4월 18일
0

📌 1. HTTP 요청 파라미터

  • 스프링이 제공하는 어노테이션을 사용하면 요청 파라미터를 매우 편리하게 사용할 수 있다.

➕ @ResponseBody

  • view 조회를 무시하고 HTTP message body에 직접 해당 내용 입력

📍 1-1. @RequestParam

  • @RequestParam : 파라미터 이름으로 값 바인딩

    • 기본 사용 방법

      		@ResponseBody
      		@RequestMapping("/request-param-v2")
      		public String requestParamV2(@RequestParam("username") String memberName,
      				@RequestParam("age") int memberAge){
                // 콘솔에 가져온 파라미터값 출력
      			System.out.println("username : " + memberName);
      			System.out.println("age : " + memberAge);
            	// 화면에는 ok 출력
      			return "ok";
      		}
    • HTTP 파라미터 이름이 변수 이름과 같으면 @RequestParam("XXX") 생략 가능

      		@ResponseBody
      		@RequestMapping("/request-param-v3")
      		public String requestParamV3(@RequestParam String username,
      				@RequestParam int age){ 
      			System.out.println("username : " + username);
      			System.out.println("age : " + age);
      			return "ok";
      		}
    • String, int 등의 단순 타입이면 @RequestParam도 생략 가능
      (* 코드의 직관성을 위해 일부러 표기하기도 함)

      			@ResponseBody
      			@RequestMapping("/request-param-v4")
      			public String requestParamV4(String username, int age){ 
      				System.out.println("username : " + username);
      				System.out.println("age : " + age);
      				return "ok";
      			}
    • required 옵션 : true이면 반드시 파라미터 값이 들어와야 함
      false일 경우 누락 가능

      • 다만 int 등의 단순 변수 타입에 null을 입력할 수 없으므로 Integer 등의 wrapper 타입으로 변경해야 함
      		@ResponseBody
      		@RequestMapping("/request-param-required")
      		public String requestParamRequired(
        		// username 누락 불가
      				@RequestParam(required = true) String username,
              // age 누락 허용, 누락시 null (Integer 타입으로 변경)
      				@RequestParam(required = false) Integer age){ 
      			System.out.println("username : " + username);
      			System.out.println("age : " + age);
      			return "ok";
      		}
    • defaultValue 옵션 : 파라미터에 기본값을 세팅

      • 빈 문자열의 경우에도 적용된다.
        예 : (/request-param-default?username= )
      		@ResponseBody
      		@RequestMapping("/request-param-default")
      		public String requestParamDefault(
      				@RequestParam(required = true, defaultValue = "guest") String username,
      				@RequestParam(required = false, defaultValue = "-1") Integer age){ 
      			System.out.println("username : " + username);
      			System.out.println("age : " + age);
      			return "ok";
      		}
    • Map 사용 : Map <key, value>

      		@ResponseBody
      		@RequestMapping("/request-param-map")
      		public String requestParamMap(@RequestParam Map<String, Object> paramMap){ 
      			System.out.println("username : " + paramMap.get("username"));
      			System.out.println("age : " + paramMap.get("age"));
      			return "ok";
      		}

📍 1-2. @ModelAttribute

  • @ModelAttribute : 단순 변수 타입이 아니라 사용자 정의 객체를 사용할 때 사용한다.
    • 기본 사용 방법
      			@ResponseBody
      			@RequestMapping("/model-attribute-v2")
      			public String modelAttributeV2(@ModelAttribute HelloData helloData) {
              // 자동으로 객체에 값을 담아오므로 바로 get 가능
      				System.out.println("username : " + helloData.getUsername());
      				System.out.println("age : " + helloData.getAge());
      				System.out.println(helloData.toString());
      				return "ok";
      			}
    • @ModelAttribute 어노테이션도 생략이 가능하다.
      			@ResponseBody
      			@RequestMapping("/model-attribute-v3")
      			public String modelAttributeV3(HelloData helloData) {
      				System.out.println("username : " + helloData.getUsername());
      				System.out.println("age : " + helloData.getAge());
      				System.out.println(helloData.toString());
      				return "ok";
      			}

📌 2. HTTP 응답 데이터 전달

📍 2-1. ModelAndView

  • addObject : ModelAndView를 리턴할 때는 생성자 파라미터에 뷰 경로를 전달하고, addObject 메서드로 데이터를 담아 리턴한다.
     	@RequestMapping("/response-view-v1")
    	public ModelAndView responseViewV1() {
    		ModelAndView mav = new ModelAndView("response/hello")
    				.addObject("data","hello");
    		return mav;
    	}

📍 2-2. Model

  • addAttribute : Model을 사용해 데이터를 반환할 때는 모델 객체에 addAttribute로 데이터를 담고, 매핑할 뷰 경로를 리턴한다.

    	@RequestMapping("/response-view-v2")
    	public String responseViewV2(Model model) {
    		model.addAttribute("data","hello2");
    		return "response/hello";
    	}
  • @ResponseBody 어노테이션을 사용할 경우 뷰 리졸버를 실행하지 않고 HTTP 메시지 바디에 직접 리턴한 문자열을 출력한다.

    	@ResponseBody
    	@RequestMapping("/response-view-v3")
    	public String responseViewV3(Model model) {
    		model.addAttribute("data","hello3");
            // "response/hello" 가 그대로 문자열로 출력됨
    		return "response/hello";
    	}

0개의 댓글