일반적으로 Query String은 @RequestParam을 사용하고, **JSON 데이터를 받으려면 @RequestBody**를 사용합니다.
하지만, Query String을 JSON 요청 본문(RequestBody)로 변환하려면 DTO 객체를 활용하거나 커스텀 컨버터를 적용할 수 있습니다.
1. 기본 Query String 처리 (@RequestParam 사용)
우선 기본적인 Query String을 처리하는 API를 살펴보겠습니다.
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/query")
public class QueryController {
@GetMapping
public Map<String, String> getQueryParams(@RequestParam Map<String, String> params) {
return params;
}
}
2. Query String을 @RequestBody로 변환하는 API
방법 1: DTO 활용하여 JSON 본문으로 변환 ***************************
Query String을 받아서 JSON 요청 본문(@RequestBody) 형태로 변환할 수 있습니다.
* DTO 클래스 생성
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class UserDTO {
private String name;
private Integer age;
}
* 컨트롤러에서 @RequestBody로 처리
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/convert")
public class ConvertController {
@PostMapping
public UserDTO convertQueryToBody(@RequestBody UserDTO userDTO) {
return userDTO; // JSON 형식으로 응답
}
}
방법 2: Query String을 JSON으로 변환 후 @RequestBody로 전달
ObjectMapper를 사용하여 Query String을 JSON 본문으로 변환하는 API를 만들 수도 있습니다.
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/convert-json")
public class ConvertJsonController {
private final ObjectMapper objectMapper = new ObjectMapper();
@GetMapping
public ResponseEntity<UserDTO> convertQueryToJson(@RequestParam Map<String, String> params) throws Exception {
// Query String을 JSON 객체로 변환
String json = objectMapper.writeValueAsString(params);
UserDTO userDTO = objectMapper.readValue(json, UserDTO.class);
return ResponseEntity.ok(userDTO);
}
}
정리
@RequestParam으로 Query String을 받는 기본 API
@RequestBody로 Query String을 JSON 요청 본문으로 변환
ObjectMapper를 사용해 Query String을 JSON으로 변환 후 처리
이제 Query String을 @RequestBody로 변환하여 처리할 수 있습니다!
|