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(파라미터들);
}