스프링 MVC - 기본기능

2025. 4. 18. 01:46·Java & Spring/Spring

□ HTTP 요청 파라미터

※ 참고사항

  • @ModelAttribute 생략 가능
  • String, int 같은 단순 타입 = @RequestParam
  • argument resolver 로 지정해둔 타입 외 = @ModelAttribute

- @RequestParam

  • HTTP 요청 파라미터(query string 또는 form data)를 메서드 파라미터에 바인딩할 때 사용.
  • 단일 파라미터나 간단한 자료형에 주로 사용됨.
@GetMapping("/hello")
public String hello(@RequestParam String name) {
    return "Hello " + name;
}

 

- @ModelAttribute

  • 폼 객체나 커맨드 객체처럼, 파라미터가 객체일 경우 사용.
  • 요청 파라미터들을 객체의 필드에 바인딩함 (자동 setter 호출).
  • 주로 POST 요청에서 폼 데이터 받을 때 사용하지만, GET도 가능.
@PostMapping("/register")
public String register(@ModelAttribute User user) {
    String userName = user.getName()
    String userEmaing = user.getEmail() // 등 사용 가능
    return "success";
}

 

□ HTTP 단순 텍스트

- Input, Output 스트림, Reader

@PostMapping("/request-body-string-v2")
public void requestBodyStringV2(InputStream inputStream, Writer responseWriter) throws IOException {
    String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
    log.info("messageBody={}", messageBody);
    responseWriter.write("ok");
}

 

스프링 MVC는 다음 파라미터를 지원한다.

  • InputStream(Reader): HTTP 요청 메시지 바디의 내용을 직접 조회
  • OutputStream(Writer): HTTP 응답 메시지의 바디에 직접 결과 출력

- HttpEntity : HTTP header, body 정보를 편리하게 조회

  • 메시지 바디 정보를 직접 조회
  • 요청 파라미터를 조회하는 기능과 관계 없음(@RequestParam X, @ModelAttribute X)
  • HttpMessageConverter 사용 → StringHttpMessageConverter 적용

- 응답에서도 HttpEntity 사용 가능

  • 메시지 바디 정보 직접 반환(view 조회X)
  • HttpMessageConverter 사용 → StringHttpMessageConverter 적용

- HttpEntity 를 상속받은 다음 객체들도 같은 기능을 제공한다.

  • RequestEntity : HttpMethod, url 정보가 추가, 요청에서 사용
  • ResponseEntity : HTTP 상태 코드 설정 가능, 응답에서 사용
return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED)

 

- @RequestBody

  • @RequestBody를 사용하면 HTTP 메시지 바디 정보를 편리하게 조회할 수 있다.
  • 헤더 정보가 필요하다면 HttpEntity를 사용하거나 @RequestHeader를 사용하면된다.


□ HTTP 요청 메시지 - JSON

@Slf4j
@Controller
public class RequestBodyJsonController {
    private ObjectMapper objectMapper = new ObjectMapper();
    @PostMapping("/request-body-json-v1")

    public void requestBodyJsonV1(HttpServletRequest request, HttpServletResponse response) throws IOException {
        ServletInputStream inputStream = request.getInputStream();

        String messageBody = StreamUtils.copyToString(inputStream, 
        StandardCharsets.UTF_8);
         log.info("messageBody={}", messageBody);

        HelloData data = objectMapper.readValue(messageBody, HelloData.class);
        log.info("username={}, age={}", data.getUsername(), data.getAge());
        response.getWriter().write("ok");
    }
}
  • HttpServletRequest를 사용해서 직접 HTTP 메시지 바디에서 데이터를 읽어와 문자로 변환
  • 문자로 된 JSON데이터를 objectMapper를 사용해서 자바 객체로 변환
@ResponseBody
@PostMapping("/request-body-json-v2")
public String requestBodyJsonV2(@RequestBody String messageBody) throws IOException {
    HelloData data = objectMapper.readValue(messageBody, HelloData.class);
     log.info("username={}, age={}", data.getUsername(), data.getAge());

    return "ok";
}
  • @RequestBody 를 사용해서 HTTP 메시지에서 데이터를 꺼내고 messageBody에 저장한다.
  • 문자로 된 JSON 데이터인 messageBody 를 objectMapper 를 통해서 자바 객체로 변환한다.
@ResponseBody
@PostMapping("/request-body-json-v3")
public String requestBodyJsonV3(@RequestBody HelloData data) {
    log.info("username={}, age={}", data.getUsername(), data.getAge());

    return "ok";
}
  • @RequestBody는 생략 불가능, 생략하게 되면 @ModelAttribute가 적용된다.

 

- @RequestBody 요청

  • JSON 요청  →  HTTP 메시지 컨버터  →  객체

- @ResponseBody 응답

  • 객체  →  HTTP 메시지 컨버터  →  JSON 응답

 

□ HTTP 응답 - 정적 리소스, 뷰 템플릿

  1. 정적 리소스 : 웹 브라우저에 정적인 HTML, css, js를 제공할 때는, 정적 리소스를 사용한다.
  2. 뷰 템플릿 사용 : 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다.
  3. HTTP 메시지 사용 : HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로,
                                   HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.

'Java & Spring > Spring' 카테고리의 다른 글

스프링 MVC - 구조 분석  (0) 2025.04.14
스프링 MVC - 멀티 쓰레드  (0) 2025.04.06
스프링 MVC - 웹 애플리케이션의 이해  (0) 2025.04.06
Spring - Spring Security  (0) 2024.10.07
JPA - Querydsl 사용법 및 실습  (0) 2024.10.04
'Java & Spring/Spring' 카테고리의 다른 글
  • 스프링 MVC - 구조 분석
  • 스프링 MVC - 멀티 쓰레드
  • 스프링 MVC - 웹 애플리케이션의 이해
  • Spring - Spring Security
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java기초
    자료구조
    프로그래머스 java 기초 트레이닝
    java 제어자
    java arrays.copyofrnage()
    Java this
    java super
    프로그래머스 java 기초트레이닝
    java
    java 에라토스테네스의 체
    데이터 타입
    java 유클리드 호제법
    개발로드맵
    java enhance switch
    java 멤버
    java two-pointer
    데이터 크기
    Java 생성자
    java 세수의합
    java 메서드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
스프링 MVC - 기본기능
상단으로

티스토리툴바