[SpringBoot] Java에서 JSON 데이터 만들기 및 파싱하기

smlee·2022년 7월 13일
0

SpringBoot - JDBC

목록 보기
3/8

우리는 REST API로 요청을 보내고 응답을 받으면 다음과 같은 형태로 데이터를 가져오는 것을 자주 보았을 것이다.

❓ JSON이란?
JavaScript Object Notation의 약자로, Javascript 객제 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다. 웹 애플리케이션에서 데이터를 전송할 때 일반적으로 사용한다. (서버에서 클라이언트로 데이터를 전송하여 표현하려거나 반대의 경우)
MIME 타입은 application/json이다. JSON은 key-value 형태로 되어 있으며, 데이터 계층을 구축할 수 있다.

우리는 때때로 스프링부트로 데이터를 받아오거나 전송할 때 JSON 데이터를 파싱하거나 생성해야할 때가 있다 이를 위해 JSONObject를 사용한다.

1. JSONObejct 설정 추가하기

(1) Maven

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

Maven을 사용한다면 위 코드를 Maven 파일에 추가한다.

(2) Gradle

    compile group: 'org.json', name: 'json', version: '20160810'

를 build.gradle 파일의 dependencies에 추가한다.

2. JSONObject 사용하기

만약 Controller에서 Request Body로 데이터를 받아온다고 생각해보자. 그런데 만약에 코드가 다음과 같이 작성되어 있으면 어떻게 될까?

@ResponseBody
    @PostMapping("")
    public BaseResponse<Long>        sendEmail(@RequestBody String email)  throws BaseException{

        if(email == null){
            return  new BaseResponse<>(BaseResponseStatus.POST_USERS_EMPTY_EMAIL);
        }

        if(!ValidationRegex.isRegexEmail(email)){
            return  new BaseResponse<>(BaseResponseStatus.POST_USERS_INVALID_EMAIL);
        }

        try{

            mailService.sendCertificationMail(email);

            long    verifyCodeId = mailService.sendCertificationMail(email);

            return  new BaseResponse<Long>(verifyCodeId);
        }
        catch (BaseException baseException){
            return  new BaseResponse<>(baseException.getStatus());
        }
    }

위와 같이 코드가 작성되고, email에 다음과 같이 데이터가 들어온다고 생각해보자.

{
	"email" : "so4644009@gmail.com"
}

그러면 위의 Controller의 결과 값은 POST_USERS_INVALID_EMAIL 오류가 나올것이다. 이 오류는 이메일 형식이 알맞지 않을 때 리턴되도록 짠 Error Response인데 왜 이런 오류가 뜰까?

그 이유는 위의 코드는 value값인 이메일만 인식하는 것이 아니라 위 JSON을 통째로 인식하기 때문이다. 이러한 오류를 해결하려면 JSONObject를 사용하면 된다.

 @ResponseBody
    @PostMapping("")
    public BaseResponse<Long>        sendEmail(@RequestBody String data)  throws BaseException{
        JSONObject  parser = new JSONObject(data);
        String      email = parser.getString("email");

        if(email == null){
            return  new BaseResponse<>(BaseResponseStatus.POST_USERS_EMPTY_EMAIL);
        }

        if(!ValidationRegex.isRegexEmail(email)){
            return  new BaseResponse<>(BaseResponseStatus.POST_USERS_INVALID_EMAIL);
        }

        try{

            mailService.sendCertificationMail(email);

            long    verifyCodeId = mailService.sendCertificationMail(email);

            return  new BaseResponse<Long>(verifyCodeId);
        }
        catch (BaseException baseException){
            return  new BaseResponse<>(baseException.getStatus());
        }
    }

JSONObject를 사용하여 입력 받은 String을 JSON으로 인식하게 하고, 해당 JSON에서 key인 email의 값을 뽑아오도록 짠 코드이다.

그러니까 String 데이터를 JSONObject를 이용하여 JSON으로 만든 후, 거기서 이메일 값을 뽑아오는 코드이다.

이런 방식으로 JSONObject를 사용한다면 SpringBoot에서 JSON 객체를 만들거나 파싱할 수 있다.

0개의 댓글