Programming/Spring

[spring/java] JSON 안의 JSON 리스트 객체로 파싱받기

예민한고라니 2022. 7. 31. 00:03

문제의 발단

API 개발 중 JSON 안에 JSON 배열(리스트)를 가진 형식의 JSON을 객체로 파싱하여 저장할 필요가 생겼다.

즉, 다음과 같은 형식의 JSON 테이터를 객체로 받아와야할 필요가 생긴것

 

{ 
	"userId" : long(아이디번호) , 
	"runningId" :long(아이디번호) , 
	"duration" : int(지속시간),
	"runningData" : [ 
	{
		"latitude" : double(경도),
		"longitude" : double(위도),
		"altitude" : double(고도),
		"speed": double(속도),
		"timestamp" : DateTime(시간)
	},{ … }
    ]
}

 

결론부터 말하면 본인은 위의 형식에 해당하는 데이터 객체를 만들어 해결했다.

 

소스 코드

1. 데이터 객체 

  • 우선 내부의 JSON 리스트의 객체, 즉 위의 경우 runningData에 해당하는 객체를 정의해주었다.
@Getter
public class RunningRowData {
    private double latitude;
    private double longitude;
    private double elevation;
    private int time;

    @Override
    public String toString(){
        return "latitude="+ latitude + "longitude="+longitude + "elevation="+elevation + "time="+time;
    }

}
  • 그리고 아래처럼 RunningRowData객체를 list로 담고, JSON을 통해 파싱되는 나머지 정보도 담은 객체를 controller 내에 만들어 주었다. (추후 외부 class로 뺄 예정)
    @Data
    static class FinishRunningRequest {
        private Long userId;
        private Long runningId;
        private int duration;
        private List<RunningRowData> runningData;
    }

2.  api 개발

  • finishRunning 함수의 파라미터로 위에 작성한 FinishRunningRequest를 받아오면 끝!
  • request.getRunningData 를하면 List<RunningRowData>으로 받아올 수있다
    @PostMapping("/api/running/finish")
    public FinishRunningResponse finishRunning(@RequestBody @Valid FinishRunningRequest request) throws JsonProcessingException {
    	
        List<RunningRowData> runningData = request.getRunningData; 
        /**
        *	내부로직
        */ 
        return  new FinishRunningResponse(파라미터들);
    }