스프링 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  (1) 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
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 이론공부
        • 개념
        • 정보처리기사 필기
        • 정보처리기사 실기 기출
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring N
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java N
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바