[TIL-DAY21] Spring 입문 [Spring 요청, 응답 데이터]

김유란·2025년 1월 22일

1. Spring 요청 데이터

- 1. GET - Query Param, Query String

ex) http://localhost:8080/tutor?name=wonuk&age=100

  • 사용하는 어노테이션
    • @RequestParam, @ModelAttribute

- 2. POST - HTML Form(x-www-form-urlencoded)

POST /form-data
content-type: application/x-www-form-urlencoded

**key1=value1&key2=value2**
  • 사용하는 어노테이션
    • @RequestParam, @ModelAttribute

@RequestParam

  • URL에서 파라미터 값과 이름을 함께 전달하는 방식으로 주로 HTTP 통신 Method 중 GET 방식의 통신을 할 때 많이 사용
  • 요청 파라미터 값에 아주 쉽고 간편하게 접근(Parameter Binding)할 수 있음
    @ResponseBody
    @GetMapping("/v4/request-param")
    public String requestParam (
    				@RequestParam(required = true) String name, // 필수
    			  @RequestParam(required = false) Integer age										
    ) {
    	// logic
    	log.info("name={}", name);
     log.info("age={}", age);
    	return "success";
    }

@ModelAttribute

  • 요청 파라미터를 받아 필요한 Object로 바인딩 해줌
  • 주로 HTML 폼에서 전송된 데이터를 바인딩하고 HTTP Method POST인 경우 사용됨
@ResponseBody
@PostMapping("/v2/tutor")
public String modelAttributeV2(
				@ModelAttribute Tutor tutor													
) {
		
	String name = tutor.getName();
	int age = tutor.getAge();

	return "tutor name = " + name + " age = " + age;
}

- 3. HTTP Request Body

  • 데이터(JSON, TEXT, XML 등)를 직접 HTTP Message Body에 담아서 사용

  • 사용하는 어노테이션

    • @RequestBody

2. Spring 응답 데이터

- 1. 정적 리소스

  • 정적인 HTML, CSS, JS, Image 등을 변경 없이 그대로 반환
    • src/main/resources/static/hello/world.html 디렉토리 구조라면
      • http://localhost:8080/hello/world.html URL로 리소스에 접근

- 2. View Template

  • Model을 참고하여 HTML 등이 동적으로 만들어지고 Client에 응답
  • Spring Boot는 기본적으로 View Template 경로(src/main/resources/templates)를 설정
  • build.gradle에 Thymeleaf 의존성을 추가하면 ThymeleafViewResolver와 필요한 Spring Bean들이 자동으로 등록됨
@Controller
public class ViewTemplateController {
	
	@RequestMapping("/response-view")
  public String responseView(Model model) {
      // key, value
      model.addAttribute("data", "sparta");

      return "thymeleaf-view";
  }
	
}

- 3. HTTP Message Body

  • 응답 데이터를 직접 Message Body에 담아 반환
  • 사용하는 어노테이션
    • @ResponseBody, ResponseEntity

0개의 댓글