반응형
@SpringQueryMap 란?
SpringQueryMap은 Spring Cloud OpenFeign 라이브러리에서 제공하는 어노테이션 중 하나입니다.
이 어노테이션은 Feign 클라이언트에서 GET 요청을 보낼 때, Query Parameter를 맵 형태로 전달하기 위해 사용됩니다.
@RequestParam과 유사한 역활을 수행하지만, 여러 개의 파라미터가 아닌 단일 맵 형태로 전달할 수 있다는 점이 다릅니다.
예를 들어, @RequestParam을 사용하여 다음과 같이 Query Parameter를 전달할 수 있습니다.
@RequestParam 사용 예시
@GetMapping("/request_param")
fun requestParam(
@RequestParam("id") id: Int,
@RequestParam("name") name: String,
) : String {
return "${id} ${name}"
}
하지만, SpringQueryMap을 사용하면 다음과 같이 맵 형태로 Query Parameter를 전달할 수 있습니다.
@SpringQueryMap 사용 예시
@GetMapping("/spring_query_map")
fun springQueryMap(
@SpringQueryMap queryParams: MyQueryParam,
) : String {
return "${queryParams.id} ${queryParams.name}"
}
data class MyQueryParam(
val id: Int,
val name: String,
)
테스트 코드
@ExtendWith(SpringExtension::class)
@WebMvcTest(SpringQueryMapController::class)
@AutoConfigureMockMvc
class SpringQueryMapControllerTest {
@Autowired
private lateinit var mockMvc: MockMvc
companion object {
const val id = "1"
const val name = "test"
val queryParams = LinkedMultiValueMap(mapOf(
"id" to listOf(id),
"name" to listOf(name)
))
const val PREFIX = "/spring_query_map"
}
@Test
fun requestParamTest() {
val result = mockMvc.perform(MockMvcRequestBuilders.get("$PREFIX/request_param")
.queryParams(queryParams)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk)
.andReturn()
assertEquals("${id} ${name}", result.response.contentAsString)
}
@Test
fun springQueryMapTest() {
val result = mockMvc.perform(MockMvcRequestBuilders.get("$PREFIX/spring_query_map")
.queryParams(queryParams)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk)
.andReturn()
assertEquals("${id} ${name}", result.response.contentAsString)
}
}
반응형
'웹, 앱 개발 > Spring' 카테고리의 다른 글
@SuperBuilder란? & 사용 예시 (1) | 2023.03.28 |
---|---|
[SpringBoot] sourceCompatibility & targetCompatibility (0) | 2022.07.19 |
[SpringJPA] @Embeddable & @Embedded (Value Type) (0) | 2022.05.23 |
[SpringBoot] Query Parameter Log (쿼리 파라미터 로그) 남기기 (0) | 2022.05.19 |
[Spring Boot] Junit5 - @RunWith(SpringRunner.class) (0) | 2022.05.13 |