본문 바로가기
SpringBoot/REST API 개발

JSON 응답 처리

by DEVLIB 2025. 4. 15.
728x90

기본 개념: @RestController와 JSON

스프링 부트에서 @RestController는 자동으로 객체를 JSON으로 변환하여 응답합니다. 내부적으로 **Jackson(ObjectMapper)**이 작동합니다.


예제: DTO를 JSON으로 응답하기

@RestController
public class MemberController {

    @GetMapping("/api/member")
    public MemberDto getMember() {
        return new MemberDto("홍길동", "danbi@example.com");
    }
}

DTO 클래스

public class MemberDto {
    private String name;
    private String email;

    // 생성자, getter, setter
    public MemberDto(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public String getName() { return name; }
    public String getEmail() { return email; }
}

결과 (JSON)

{
  "name": "홍길동",
  "email": "danbi@example.com"
}

JSON 응답 실습 포인트

포인트
설명
자동 변환 @RestController 또는 @ResponseBody가 있으면, 리턴 객체가 JSON으로 자동 변환
ObjectMapper 사용 스프링 부트는 내부적으로 Jackson 라이브러리를 사용
응답 상태 코드 지정 ResponseEntity 사용

ResponseEntity로 응답 제어

@GetMapping("/api/member")
public ResponseEntity<MemberDto> getMember() {
    MemberDto dto = new MemberDto("홍길동", "test@example.com");
    return ResponseEntity.ok(dto);  // 200 OK 상태로 JSON 응답
}

상태 코드 바꾸기

return ResponseEntity.status(HttpStatus.CREATED).body(dto); // 201 Created

커스텀 응답 포맷 설계 예시

public class ApiResponse<T> {
    private int status;
    private String message;
    private T data;

    public ApiResponse(int status, String message, T data) {
        this.status = status;
        this.message = message;
        this.data = data;
    }

    // getter 생략
}

사용 예:

@GetMapping("/api/member")
public ResponseEntity<ApiResponse<MemberDto>> getMember() {
    MemberDto dto = new MemberDto("홍길동", "danbi@example.com");
    ApiResponse<MemberDto> response = new ApiResponse<>(200, "요청 성공", dto);
    return ResponseEntity.ok(response);
}

결과 (JSON)

{
  "status": 200,
  "message": "요청 성공",
  "data": {
    "name": "홍길동",
    "email": "danbi@example.com"
  }
}

JSON 응답 커스터마이징: @JsonProperty, @JsonIgnore 등


 

애너테이션 설명
@JsonProperty("user_name") JSON key 이름 변경
@JsonIgnore 해당 필드 응답에서 제외
@JsonInclude(Include.NON_NULL) null 값은 포함하지 않음

예시:

@JsonProperty("user_name")
private String name;

마무리 요약

항목 설명
자동 JSON 변환 @RestController + DTO 클래스
라이브러리 Jackson 사용 (내장됨)
응답 제어 ResponseEntity, 상태코드 설정
커스터마이징 @JsonProperty, @JsonIgnore, ApiResponse 패턴
LIST

'SpringBoot > REST API 개발' 카테고리의 다른 글

DTO, 응답 포맷 구조화  (0) 2025.04.15
Postman / Swagger를 활용한 테스트  (0) 2025.04.15