티스토리 뷰

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
반응형
반응형
300x250