Spring에서 REST 서비스 컨트롤러를 위한 가상 클라이언트를 만들려고 했습니다.
@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 매개변수로 인코딩할까요?