티스토리 뷰
일반적으로 Controller에서 Json Body를 받을 때는 DTO 클래스를 정의하여,
해당 클래스를 인자로 Body값을 받습니다.
Jackson 라이브러리로 JSON과 POJO 간에 데이터바인딩을 이용하죠.
하지만, 개발을 하다보면 딱 고정된 규격이 아니라 확장가능한 유연한 규칙이 있는 가변 파라메터를 받기도 합니다.
저 같은 경우에는 json 바디를 받아 SQL Query를 구성하는 로직을 구현하였는데,
가용한 key 값들은 정해져있지만, Query 구성에 따라 전달되는 key값들과 level이 다릅니다.
이런 경우 아래와 같이 HashMap<String, Object>를 사용하여 Body를 받을수 있습니다.
@RestController
public class HashMapController {
@PostMapping(path = "/map")
public String mapRequest(@RequestBody HashMap<String, Object> param){
System.out.println("param : " + param);
return param.toString();
}
}
아래와 같은 json으로 요청을 하면 param 변수에 json 값이 들어가게 되고, HashMap의 key값으로 value를 추출할 수 있습니다.
POST http://localhost:8080/map
Content-Type: application/json
{
"wkt": "1",
"ages": "2",
"gender": "3",
"school": {
"name": "elementary",
"location": "Seoul"
}
}
POST http://localhost:8080/map
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 67
Date: Mon, 30 Aug 2021 05:38:42 GMT
Keep-Alive: timeout=60
Connection: keep-alive
{wkt=1, gender=3, school={name=elementary, location=Seoul}, ages=2}
Response code: 200; Time: 214ms; Content length: 67 bytes
개발을 하면서 느낀 점은 이렇게 가변형태로 Body를 받더라도 어느 정도는 DTO로 정의가 가능합니다.
정의가 가능한 부분은 최대한 DTO로 정의를 하여 로직을 짜는 것이 개발/유지보수에 많은 도움이 됩니다.
( 실제로 DTO를 정의하지 않고 HashMap 그대로 파싱하여 로직을 구성하다보니, HashMap의 depth에 따라 3,4중의 for문에 머리가 어지러울 정도였습니다. )
'Spring' 카테고리의 다른 글
Spring Controller 다양한 파라메터 사용 방법 (0) | 2021.10.05 |
---|---|
Spring 파일 업로드 REST API 구현하기( MultipartFile ) (0) | 2021.08.30 |
IntelliJ + Gradle + JUnit 사용시 에러( package org.junit does not exist ) (1) | 2021.06.04 |
Spring boot + H2 데이터 베이스 활용 (0) | 2021.05.18 |
[ SpringBoot ] Yaml 파일 포맷 과 값 읽기 (0) | 2020.08.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Java
- Container
- plugin
- maven
- AWS
- gradle
- Index
- Size
- Linux
- SpringBoot
- docker
- logstash
- error
- Postman
- Filter
- intellij
- mac
- spring
- spring boot
- apm
- JSON
- Kibana
- scala
- install
- elasticsearch
- Spark
- Log
- JPA
- Git
- tomcat
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함