티스토리 뷰
728x90
반응형
@JsonProperty를 사용한 객체 매핑 (지원되지 않음)
OpenFeign은 Jackson을 활용한 JSON 변환(Body 처리)을 지원하지만, 쿼리스트링(Query String) 변환에서는 @JsonProperty를 인식하지 않습니다.
public class UserRequest {
@JsonProperty("user_name")
private String name;
@JsonProperty("user_age")
private int age;
// 기본 생성자, Getter, Setter 생략
}
@FeignClient(name = "userClient", url = "http://example.com")
public interface UserClient {
@GetMapping("/users")
List<UserResponse> getUsers(@RequestParam UserRequest request); // 오류 발생
}
@SpringQueryMap을 이용한 객체 매핑
OpenFeign에서는 쿼리스트링으로 객체를 변환할 때 @SpringQueryMap 애너테이션을 사용해야 합니다
import feign.QueryMap;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
@FeignClient(name = "userClient", url = "http://example.com")
public interface UserClient {
@GetMapping("/users")
List<UserResponse> getUsers(@SpringQueryMap UserRequest request); // ✅ 객체를 자동으로 쿼리스트링으로 변환
}
public class UserRequest {
private String userName;
private int userAge;
// 기본 생성자, Getter, Setter
}
@QueryMap을 이용한 수동 변환
만약 JSON 필드명을 다르 매핑해야 한다면, Map<String, Object>을 사용하여 수동으로 변환할 수 있습니다.
public class UserRequest {
private String name;
private int age;
// Getter, Setter 생략
public Map<String, Object> toQueryMap() {
Map<String, Object> queryMap = new HashMap<>();
queryMap.put("user_name", name);
queryMap.put("user_age", age);
return queryMap;
}
}
@FeignClient(name = "userClient", url = "http://example.com")
public interface UserClient {
@GetMapping("/users")
List<UserResponse> getUsers(@QueryMap Map<String, Object> queryParams);
}
UserRequest request = new UserRequest("홍길동", 30);
userClient.getUsers(request.toQueryMap());
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring] @ModelAttribute (0) | 2025.01.30 |
---|---|
[Spring Boot] Spring Boot 2.7 이후 MustacheEnvironmentCollector deprecated (0) | 2024.03.11 |
[Spring] Swagger Fail to load remote configuration 접속 불가 (0) | 2024.02.19 |
[Spring Boot] @ExceptionHandler 에서 동일한 Exception을 구분해서 처리하는 방법 (0) | 2023.11.24 |
[Spring Boot] No spring.config.import property has been defined (1) | 2023.11.23 |
반응형
300x250