Я попытался создать имитацию клиента для своего контроллера службы REST в Spring.
@PostMapping("/search")
public Page<MeasureDto> searchMeasures(@RequestBody MeasureDto example, Pageable pageable) {
...
}
Клиент выглядит так:
@PostMapping("/search")
public Page<MeasureDto> searchMeasures(@RequestHeader("apiKey") String apiKey, @RequestBody MeasureDto example, Pageable pageable);
При запуске теста возникает следующее исключение:
Вызвано: java.lang.IllegalStateException: у метода слишком много параметров тела: public abstract org.springframework.data.domain.Page com.foo.bar.jobservice.client.MeasureServiceClient.searchMeasures (java.lang.String, com.example .foo.jobservice.client.dto.MeasureDto, org.springframework.data.domain.Pageable)
Что я уже знаю / пробовал:
На github есть закрытая проблема: https://github.com/spring-cloud/spring-cloud-netflix/issues/556
Проблема с фиксацией, которая должна была решить проблему:
https://github.com/spring-cloud/spring-cloud-openfeign/issues/26
Коммит:
Что я настроил:
import feign.codec.Encoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.support.PageJacksonModule;
import org.springframework.cloud.openfeign.support.PageableSpringEncoder;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@EnableFeignClients
@Configuration
public class FeignConfig {
@Bean
public PageJacksonModule pageJacksonModule() {
return new PageJacksonModule();
}
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public Encoder feignEncoder() {
return new PageableSpringEncoder(new SpringEncoder(messageConverters));
}
}
Все еще не работает.
Что я использую:
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.3.RELEASE</version>
Что я делаю неправильно?
Обновление:
Я создал воспроизводимый пример:
https://github.com/manuelwaltschek/mre.git
Запустите клиентскую службу или вызовите spring / spring-cloud-openfeign / 375-pageable-not-working / parent / client / src / test / java / com / example / client / HelloServiceClientTest.java.
Открытые проблемы на github: https://github.com/spring-cloud/spring-cloud-openfeign/issues/375 https://github.com/spring-cloud/spring-cloud-openfeign/issues/385
Изменить: в основном я хочу знать, как передать страницу фальшивому клиенту. Может быть, закодировать в параметрах url?
Связанный вопрос: как передать Spring Pageable в FeignClient