있을 유, 참 진

[SpringMVC] 업무에서 활용한 @RequestBody 사용법 정리 본문

Spring

[SpringMVC] 업무에서 활용한 @RequestBody 사용법 정리

U_ma 2023. 3. 30. 21:51
RequestBody
   - java 객체에 매핑하는 법
Controller에서 DTO 받을 때 JSON 형태
   - Offset 객체 소개
   - Offset 객체로 받을 때의 JSON 형태
   - List로 받을 때의 JSON 형태

RequestBody

💡@RequestBody는 JSON 형태의 데이터를 Java 객체에 매핑할 때 사용하는 어노테이션. Http 통신 메세지 구성의 status line, headers, body 세 부분으로 중 body 부분의 데이터를 받아올 때 사용
POST http://localhost:8080/api/v1/user
Content-Type: application/json

{
    "username" : "이유진",
    "email" : "yoojinLee.dev@gamil.com"
}
...
public class UserApiController {
        ...
    @PostMapping
    public ResponseEntity save(UserRequestDto requestDto) {
        ...
    }
}

회원 가입을 구현한다고 가정 시 Json의 형태로 해당 데이터를 보내주고 UserRequestDto 객체로 해당 정보를 받으려고 한다면, UserRequestDto는 username, email 필드가 존재한다고 해도 해당 값을 받아올 수 없다.

java 객체에 매핑하는 법

💡 HTTP 요청과 함께 받은 JSON 데이터를 Java객체에 매핑하기 위해, @RequestBody를 사용해야 한다.
...
public class UserApiController {
        ...
    @PostMapping
    public ResponseEntity save(@RequestBody UserRequestDto requestDto) {
        ...
    }
}

Controller에서 DTO로 받을 때 JSON 형태

💡Offset이라는 객체를 하나로 받을 때와 리스트로 받을 때의 상황으로 가정해 봤다.

Offset 객체 소개

@Getter
@NoArgsConstructor
@Entity
public class offset {
    @Id
    private long id;

    private int x;
    private int y;
}

예시 Entity를 구성했다. 여기서 x, y의 값을 DTO의 형태를 통해 받아오는 상황을 설명한다.

Offset 객체로 받을 때의 JSON 형태

@Getter
public class TestRequestDto {
    private String title;
    private Offset offset;
}
{
        ...
    "offset" : {
        "x": 10,
        "y": 5
    } 
}

List로 받을 때의 JSON 형태

@Getter
public class TestRequestDto {
    private String title;
    private List<Offset> offsets = new ArrayList<>();
}
{
        ...
    "offsets" : [
        {
            "x": 10,
            "y": 5
        },
        {
            "x": 11,
            "y": 6
        }
    ]
}
Comments