서론
이전편에서 MariaDB에 Json 데이터를 저장하였습니다.
저희 프로젝트에서는 사용자가 원하는 문학작품을 원하는 글씨체를 선택하여 전자 필기를 연습하도록합니다.
따라서 사용자가 글씨를 썼을 때 교본의 글씨와 분석하는 과정이 필요합니다.
그러므로 DB에 교본 글씨 분석 결과를 Json 형태로 저장하였고 사용자의 글씨를 json 형태로 PostMapping으로 받도록 설계하였습니다.
본론
1단계: 전달받을 Json 데이터 형식 파악하기
전달받을 Json 데이터 형식은 아래와 같습니다. json형식과 array 형식이 합쳐져 있는 복잡한 형태입니다.
(음절: x좌표, y좌표, 가로길이, 세로길이, 중심점의 y좌표 / 음소: [한음절의[x좌표, y좌표, 가로길이, 세로길이]])
[
{
"syllable": { #음절
"0": [ [ x, y, w, h, cy], [ x, y, w, h, cy] ,...],
"1": [ [ x, y, w, h, cy],...], ..], ..
},
"character": { #음소
"0": [
[ [x,y,w,h], [x,y,w,h], [x,y,w,h] ], # 자음, 모음, 받침
[ [x,y,w,h], [x,y,w,h], [x,y,w,h] ] , ...
]
],
"1": ...
}
]
2단계: DB에서 Json데이터를 불러와서 Spring이 다룰 수 있는 데이터로 만들기
IntelliJ에서 정의한 DB테이블 형식은 아래와 같습니다.
Map<String, Object>를 이용하여 Json을 다루겠습니다.
JsonStringConverter클래스를 이용하여 String을 Json형태로 바꾸어줍니다.
JsonStringConverter의 코드 및 설명은 아래와 같습니다.
AttributeConverter를 이용하여 String(DB에 Json은 longtext형으로 저장됩니다.)을 Json형태(Map<String(키), Object(밸류)>)로 바꿀 코드를 작성합니다.
AttributeConverter를 implement하여 Json<->String을 하는 코드를 작성합니다.
이렇게 코드를 작성하면
아래와 같이 "테이블이름(여기서는 textbook).gettextBookAnalysis" 코드로 Map<String, Object>형태(Json 형태)로 문학작품 교본 분석 결과를 가져올 수 있습니다.
3단계: @PostMapping의 @RequestBody로 Json 형태의 데이터를 받아 Spring boot에서 활용할 수 있는 형태로 바꾸기
@RequestBody로 받은 것을 Spring boot에서 활용할 수 있는 형태로 바꿀 때, JsonParser라이브러리의 parseString 메소드를 사용하였습니다.
다른 블로그에서는 JsonParser의 parse 메소드를 사용하는 예제가 있었지만 이 메소드가 deprecated 된 상태였기 때문에 parseString을 사용하였습니다.
음절은 "syllable", 음소는 "character"라는 키 값으로 Json에 저장되어있으므로 이것으로 값 데이터를 뽑아내었습니다.
그리고 저희 프로젝트에서 사용하는 Json은 Json 안에 Json 형식이 또 있었기 때문에 JsonElement를 여러번 사용하였습니다.
간단히, 사용법을 정리하자면 {"키": 값} 형태의 Json_Object은 Map<String, Object>에 담고, Json_Object 안에 있는 Json_Array는 List<Integer> 이런 식으로 List를 사용하였습니다.
결론
이렇게 코드를 작성하고 잘 뽑아낸 Map을 리턴하면 아래의 postman의 결과처럼 예쁘게 Json 형태로 원하는 결과를 얻을 수 있습니다.
'졸업프로젝트' 카테고리의 다른 글
'바른 글씨' 프로젝트 회고록 (0) | 2022.06.28 |
---|---|
[그로쓰][MariaDB/MySQL] MariaDB에 Json 칼럼 생성하기, 복잡한 형태의 Json 데이터 저장하기 - MariaDB에 Json 저장하기 (0) | 2022.05.13 |
[그로쓰][Spring boot/ AWS EC2] 외부 설정 파일, 내부 설정 파일 끌어오기의 차이점 (0) | 2022.04.21 |
[그로쓰][Spring Boot Data JPA / AWS S3/ AWS RDS] Spring Boot에서 AWS RDS와 S3에 함께 정보를 저장하기 (0) | 2022.04.11 |
[그로쓰][AWS] Route 53, ACM, ELB로 https 적용하기- 대상 그룹 설정하기 - 본편 및 오류 해결 (0) | 2022.04.11 |