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
就我而言,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)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |