Как определить сопоставление с несколькими конечными точками в FeignClient? - PullRequest
1 голос
/ 23 февраля 2020

Я создал @FeignCleint в своем приложении со следующим отображением:

@FeignClient(name="${mongo.service.id}", url="${mongo.service.url}")
public interface MongoBusinessDayDataInterface {
    String requestMappingPrefix = "/api/businessDayData";

    @GetMapping(path = {requestMappingPrefix + "/{businessDate}",
                        requestMappingPrefix + "/{businessDate}/{terminalId}",
                        requestMappingPrefix + "/{businessDate}/{currency}",
                        requestMappingPrefix + "/{businessDate}/{terminalId}/{currency}"})
    BusinessDayData fetchBusinessDayData(@PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate businessDate,
                                         @PathVariable(required = false) String terminalId,
                                         @PathVariable(required = false) CurrencyType currency);
}

, когда я пытаюсь загрузить приложение, я получаю следующее исключение:

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'com.poalim.dc.atm.reconciliation.rest.feign.service.MongoBusinessDayDataInterface': 
FactoryBean threw exception on object creation; 
nested exception is java.lang.IllegalStateException: 
Method fetchBusinessDayDataList can only contain at most 1 value field. 
Found: [/api/businessDayData/list/{businessDate}, /api/businessDayData/list/{businessDate}/{terminalId}, /api/businessDayData/list/{businessDate}/{currency}, /api/businessDayData/list/{businessDate}/{terminalId}/{currency}]

, если Атрибут path может принимать массив строк, почему он говорит, что «может содержать не более 1 поля значения»?

1 Ответ

0 голосов
/ 23 февраля 2020

@GetMapping - это аннотация из модуля Spring Web, которая обычно используется в контроллерах серверных приложений.

По умолчанию Feign не поддерживает подобные аннотации. У него есть его собственный набор . Например, @RequestLine поддерживает только один путь.

spring-cloud-openfeign добавляет дополнительную поддержку для использования аннотаций Spring-Web для симулированных клиентов исключительно для удобства разработчика (см. SpringMvcContract ). Но, в этом случае, есть некоторые несоответствия подписи аннотаций, которые вы должны игнорировать в этом случае.

Кстати, логически бессмысленно устанавливать несколько путей, когда вы используете Feign. Это клиент, поэтому он должен знать, какой путь будет выбран при выполнении запроса через него.

...