假装和可分页

Les*_*aRB 1 spring spring-data spring-boot feign

告诉我如何正确配置Feign和Spring Pageable的工作这里是我的Feign设置

feign:
  okhttp:
    enabled: true
  autoconfiguration:
    jackson:
      enabled: true
  client:
    config:
      default:
        connectTimeout: ${FEIGN_DEFAULT_CONNECT_TIMEOUT:10000}
        readTimeout: ${FEIGN_DEFAULT_READ_TIMEOUT:60000}
        loggerLevel: full
        errorDecoder: ru.core.config.TokenErrorDecoder
        retryer: ru.service.SudisTokenService
Run Code Online (Sandbox Code Playgroud)

我的假客户

@FeignClient(name = "BaseCaseFeignClient", url = "${feign.services.host-backend.url}")
public interface BaseCaseFeignClient {
    @GetMapping("/api/cases/base")
    Page<BaseCaseEntityDto> getBaseCases(@SpringQueryMap BaseCaseEntityFilter filter, Pageable pageable);

    @PostMapping("/api/cases/base/search")
    Page<FoundRecordDto> searchCases(@RequestBody FilterSpecification filter, @SpringQueryMap Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)

获取请求工作正常。发布请求时出现问题。我收到以下错误

"No property caseOpenDttm: DESC found for type BaseCaseEntity!"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,该项目根本不会被组装。

Page<FoundRecordDto> searchCases(@RequestBody FilterSpecification filter, Pageable pageable);

Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract org.springframework.data.domain.Page ru..BaseCaseFeignClient.searchCases(ru.ilter.shared.basecase.search.FilterSpecification,org.springframework.data.domain.Pageable)
Warnings:
Run Code Online (Sandbox Code Playgroud)

原始请求

http://localhost:8081/cpt/api/cases/base/search?page=0&size=10&sort=caseOpenDttm,DESC

而不是这样的请求

http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&page=0&sort=caseOpenDttm,DESC

假装发送

http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&sort=caseOpenDttm%3A%20DESC&page=0

http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&sort=caseOpenDttm: DESC&page=0
Run Code Online (Sandbox Code Playgroud)

我找到了一个类似的解决方案https://github.com/spring-cloud/spring-cloud-openfeign/issues/146 问题是我已经有一个@RequestBody

lus*_*uso 5

就我而言,feign.autoconfiguration.jackson.enabled = true仅靠自己并不能解决问题。

我看到豆子被创建了

org.springframework.cloud.openfeign.FeignAutoConfiguration

@Configuration(proxyBeanMethods = false)
    @ConditionalOnClass({ Module.class, Page.class, Sort.class })
    @ConditionalOnProperty(value = "feign.autoconfiguration.jackson.enabled", havingValue = "true")
    protected static class FeignJacksonConfiguration {

        @Bean
        @ConditionalOnMissingBean(PageJacksonModule.class)
        public PageJacksonModule pageJacksonModule() {
            return new PageJacksonModule();
        }

        @Bean
        @ConditionalOnMissingBean(SortJacksonModule.class)
        public SortJacksonModule sortModule() {
            return new SortJacksonModule();
        }
}
Run Code Online (Sandbox Code Playgroud)

但对连载没有影响。

我必须在 Jackson 配置中手动添加这两个模块

@Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper().registerModules(
                                         new ProblemModule(),
                                         new ConstraintViolationProblemModule(),
                                         new JavaTimeModule(),
                                         new Jdk8Module(),
                                         new PageJacksonModule(),
                                         new SortJacksonModule())
                                 .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
                                 .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助