[Spring] 객체로 데이터 송신(DTO)

호빵·2024년 8월 30일

Spring_이론

목록 보기
3/7

📅 공부 기간 : 08. 21(수)

개요

  1. 많은 양의 데이터가 클라이언트로부터 전송되면, 서버는 @ModelAttribute 애너테이션을 이용해 하나로 객체로 받아 처리함.
public String regist(
			@ModelAttribute Friend friend, // 매개변수 위치에 사용
			Model model )
  1. DTO를 생성

    • 기본 생성자 (@NoArgsConstructor)
    • setter를 이용해서 데이터가 저장될 수 있도록 준비 (@Setter)
    • 클라이언트측 form태그의 name값과 DTO의 변수명이 같아야
      값을 setting할 수 있음.
  2. Model 객체에 데이터(객체)를 담음.

model.addAttribute("friend", friend);
  1. Thymeleaf로 데이터를 꺼내야 하는 클라이언트는 getter를 이용해서 데이터를 꺼냄.
<!-- i) 태그 안 th 붙이기 -->
<p th:text="${id}">아이디</p>

<!-- ii) [[${}]] -->
<p>이름 : [[ ${friend.username} ]]</p>

HTML

<!DOCTYPE html>
<html xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>객체로 데이터 송신하기</title>
</head>
<body>
	<h2>객체로 데이터 송신하기</h2>
	<form action="regist" method="POST">
		<label for="username">이름 : </label>
		<input type="text" id="username" name="username" placeholder="이름을 입력"><br>
		
		<label for="age">나이 : </label>
		<input type="text" id="age" name="age" placeholder="나이를 입력"><br>
		
		<label for="phone">번호 : </label>
		<input type="text" id="phone" name="phone" placeholder="번호를 입력"><br>
		
		<label for="birthday">생년월일 : </label>
		<input type="date" id="birthday" name="birthday" placeholder="생년월일 선택"><br>
		
		<label>성향 :
			<input type="radio" name="active" value="0"> 내성적 &nbsp;
			<input type="radio" name="active" value="1" checked> 외향적  
		</label>
		<br><br>
		
		<input type="submit" value="전송">
		<input type="reset" value="취소">
		
	
	</form>
</body>
</html>

Controller

package com.kdigital.spring4.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

import com.kdigital.spring4.dto.Friend;

@Controller
public class FriendController {
	@PostMapping("/regist")
	public String regist(
			@ModelAttribute Friend friend,
			Model model ){
		System.out.println(friend);
		
		model.addAttribute("friend", friend); // friend 객체에서 정보를 꺼낼 때 "friend"라는 이름으로 꺼냄
		
		return "registResult"; // forwarding
	}
}

DTO

  • lombok 라이브러리에서 제공하는 애너테이션
    • @NoArgsConstructor : 기본 생성자 자동 생성
    • @Setter : Setter 자동 생성
    • @Getter : Getter 자동 생성
    • @ToString : toString() 메서드 자동 생성
package com.kdigital.spring4.dto;

import java.time.LocalDate;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@NoArgsConstructor
@Setter
@Getter
@ToString
public class Friend {
	private String username;
	private Integer age;
	private String phone;
	private LocalDate birthday;
	private boolean active;
}

registResult.html

<!DOCTYPE html>
<html xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>객체 데이터 꺼내기</title>
</head>
<body>
	<h2>객체 데이터 꺼내기</h2>
	<p> 전체 출력 : [[ ${friend} ]] </p> <!-- toString()으로 출력 -->
	<p>
	이름 : [[ ${friend.username} ]]<br>
	<!-- "friend"로 담아서 friend로 꺼냄,
	'.username' 붙이면 getter로 꺼내는 방식이 됨(friend.getUsername()으로 자동으로 바뀜) -->
	나이 : [[ ${friend.age } ]]<br> 
	전화번호 : [[ ${friend.phone }]]<br> 
	생년월일 : [[ ${friend.birthday }]]<br>
	성향 : [[ ${friend.active }]]<br>
	</p>
	
</body>
</html>

profile
인류의 위대한 대화에 참여하기 위해 다양한 언어를 탐구합니다.

0개의 댓글