문제의 발단
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(파라미터들);
}
'Programming > Spring' 카테고리의 다른 글
[스프링/Spring] @SpringBootApplication 어노테이션을 완벽하게 파헤쳐보자 (0) | 2023.01.09 |
---|---|
[Spring/Java/Jackson] JSON List를 문자열(String)으로 변환 (0) | 2022.07.31 |
[Mac/Intellij] Spring + mariaDB 연동 프로젝트 만들기 & 환경셋팅 (0) | 2022.07.06 |
[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 2. Repository 생성 (0) | 2022.03.23 |
[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 1. Entity 생성 (0) | 2022.03.22 |