powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Feign & Pageable
24 сообщений из 24, страница 1 из 1
Feign & Pageable
    #40060194
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как правильно настроить работу Feign и Spring Pageable

Вот мои настройки Feign

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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



Вот CaseFeignClient для работы

Код: java
1.
2.
3.
4.
5.
@FeignClient(name = "BaseCaseFeignClient", url = "${feign.services.host-backend.url}")
public interface BaseCaseFeignClient {

    @GetMapping(value = "/api/cases/base", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    Page<BaseCaseEntityDto> getBaseCases(@SpringQueryMap BaseCaseEntityFilter filter, Pageable pageable);




В результате ошибка

Код: java
1.
2.
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "pageable" (class org.springframework.cloud.openfeign.support.PageJacksonModule$SimplePageImpl), not marked as ignorable (5 known properties: "content", "totalElements", "sort", "number", "size"])
 at [Source: (ByteArrayInputStream); line: 1, column: 17783] (through reference chain: org.springframework.cloud.openfeign.support.PageJacksonModule$SimplePageImpl["pageable"])



Опцию включил, как сказано тут
https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#spring-data-support
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060202
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060207
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем нужен этот Feign вкратце? Перевод говорит что это - "симулировать и притворятся"...
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060209
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C Get разобрался, теперь ошибка с Post

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

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@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);

}



Получаю ошибку
Код: java
1.
"No property caseOpenDttm: DESC found for type BaseCaseEntity!"



Если написать так (без @SpringQueryMap )
Код: java
1.
Page<FoundRecordDto> searchCases(@RequestBody FilterSpecification filter, Pageable pageable);



То даже не собирается

Код: java
1.
2.
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:
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060216
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А зачем нужен этот Feign вкратце? Перевод говорит что это - "симулировать и притворятся"...

Не совсем понял
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060289
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А зачем нужен этот Feign вкратце? Перевод говорит что это - "симулировать и притворятся"...


В runtime "генерирует" клиент для REST сервиса по интерфейсу + аннотациям
В Spring Cloud заодно интегрирован с автообнаружением сервисов, позволяет в качестве аннотаций клиента использовать аннотации Spring MVC. Не помню, интегрирован ли с Circuit Breaker.
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060292
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,

А можно stack trace ошибки? А то у меня сомнения, что проблема на клиентской стороне.
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060293
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch
mayton
А зачем нужен этот Feign вкратце? Перевод говорит что это - "симулировать и притворятся"...


В runtime "генерирует" клиент для REST сервиса по интерфейсу + аннотациям
В Spring Cloud заодно интегрирован с автообнаружением сервисов, позволяет в качестве аннотаций клиента использовать аннотации Spring MVC. Не помню, интегрирован ли с Circuit Breaker.

Хм... Понятно. А как работает авто-обнаружение. Это что-то типа WS-discovery?
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060299
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Lelouch
пропущено...


В runtime "генерирует" клиент для REST сервиса по интерфейсу + аннотациям
В Spring Cloud заодно интегрирован с автообнаружением сервисов, позволяет в качестве аннотаций клиента использовать аннотации Spring MVC. Не помню, интегрирован ли с Circuit Breaker.

Хм... Понятно. А как работает авто-обнаружение. Это что-то типа WS-discovery?


Нет, это часть spring cloud. Само discovery зависит от инфраструктуры, есть разные реализации для Eureka, Zookeeper, Kubernetes, etc.
Конкретно для feign переопределяется реализация Http клиента (если я правильно помню)
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060302
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch
-=Koba=-,

А можно stack trace ошибки? А то у меня сомнения, что проблема на клиентской стороне.


Так выглядит метод (без @SpringQueryMap не собирается, говорит два body)
Код: java
1.
2.
    @PostMapping("/api/cases/base/search")
    Page<FoundRecordDto> searchCases(@RequestBody FilterSpecification filter, @SpringQueryMap Pageable pageable);



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
ru.core.service.SudisTokenService - Refreshing token, new token AAABeKt2aqrxk9hJ ru.atc.mvd.gismu.shared.feign.core.service.SudisTokenService@4b11cf6d
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] ---> POST http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&sort=caseOpenDttm%3A%20DESC&page=0 HTTP/1.1
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] Content-Length: 448
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] Content-Type: application/json
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] cpt-public: cpt-public
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] Gateway-Authorization: Bearer AAABeKt2aqrxk9hJ
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] login-name: gismu_user_01-mock
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] 
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] {"caseModuleCode":null,"caseId":null,"caseNumber":null,"caseTypeIds":null,"caseTypeMnemonics":[],"statusMnemonics":[],"caseStartReasonMnemonics":["caseStartCPTForeign"],"openDepartmentRefId":2411084613314155621,"departmentRefId":null,"caseOpenDateFrom":null,"caseOpenDateTo":null,"applicationNumber":null,"applicationDttmFrom":null,"applicationDttmTo":null,"personEsflIds":null,"isOnProcess":null,"activityId":null,"childProcessDefinitionKey":null}
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] ---> END HTTP (448-byte body)
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] <--- HTTP/1.1 500  (137ms)
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] connection: close
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] content-type: application/json
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] date: Wed, 07 Apr 2021 08:32:48 GMT
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] processid: 09ce443c-bf60-48db-b4b9-b8300678ac34
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] transfer-encoding: chunked
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] vary: Origin
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] vary: Access-Control-Request-Method
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] vary: Access-Control-Request-Headers
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] 
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] {"errorCode":"PropertyReferenceError","description":"No property caseOpenDttm: DESC found for type BaseCaseEntity!","localizedMessage":"Внутренняя ошибка сервиса","timestamp":"2021-04-07T11:32:48+03:00","details":null}
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] <--- END HTTP (241-byte body)
ru.exceptionhandler.GlobalControllerExceptionHandler - [500 ] during [POST] to [http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&sort=caseOpenDttm%3A%20DESC&page=0] [BaseCaseFeignClient#searchCases(FilterSpecification,Pageable)]: [{"errorCode":"PropertyReferenceError","description":"No property caseOpenDttm: DESC found for type BaseCaseEntity!","localizedMessage":"Внутренняя ошибка сервиса","timestamp":"2021-04-07T11:32:48+03:00","details":null}]
feign.FeignException$InternalServerError: [500 ] during [POST] to [http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&sort=caseOpenDttm%3A%20DESC&page=0] [BaseCaseFeignClient#searchCases(FilterSpecification,Pageable)]: [{"errorCode":"PropertyReferenceError","description":"No property caseOpenDttm: DESC found for type BaseCaseEntity!","localizedMessage":"Внутренняя ошибка сервиса","timestamp":"2021-04-07T11:32:48+03:00","details":null}]
	at feign.FeignException.serverErrorStatus(FeignException.java:231)
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060304
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходный запрос

Код: java
1.
http://localhost:8081/cpt/api/cases/base/search?page=0&size=10&sort=caseOpenDttm,DESC




То есть вместо такого запроса

Код: java
1.
http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&page=0&sort=caseOpenDttm,DESC



Feign отсылает

Код: java
1.
2.
3.
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




Это мой контроллер

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @PostMapping
    @RequestMapping("/search")
    public Page<FoundRecordDto> searchCases(@RequestBody FilterSpecification filter,
                                            @SortDefault.SortDefaults({
                                                    @SortDefault(sort = "caseOpenDttm", direction = Sort.Direction.ASC),
                                                    @SortDefault(sort = "caseNumberNo", direction = Sort.Direction.ASC)}
                                            ) Pageable pageable) {
        return baseCaseFeignClient.searchCases(filter, pageable);
    }
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060308
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Lelouch
-=Koba=-,

А можно stack trace ошибки? А то у меня сомнения, что проблема на клиентской стороне.


Так выглядит метод (без @SpringQueryMap не собирается, говорит два body)
Код: java
1.
2.
    @PostMapping("/api/cases/base/search")
    Page<FoundRecordDto> searchCases(@RequestBody FilterSpecification filter, @SpringQueryMap Pageable pageable);



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
ru.core.service.SudisTokenService - Refreshing token, new token AAABeKt2aqrxk9hJ ru.atc.mvd.gismu.shared.feign.core.service.SudisTokenService@4b11cf6d
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] ---> POST http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&sort=caseOpenDttm%3A%20DESC&page=0 HTTP/1.1
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] Content-Length: 448
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] Content-Type: application/json
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] cpt-public: cpt-public
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] Gateway-Authorization: Bearer AAABeKt2aqrxk9hJ
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] login-name: gismu_user_01-mock
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] 
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] {"caseModuleCode":null,"caseId":null,"caseNumber":null,"caseTypeIds":null,"caseTypeMnemonics":[],"statusMnemonics":[],"caseStartReasonMnemonics":["caseStartCPTForeign"],"openDepartmentRefId":2411084613314155621,"departmentRefId":null,"caseOpenDateFrom":null,"caseOpenDateTo":null,"applicationNumber":null,"applicationDttmFrom":null,"applicationDttmTo":null,"personEsflIds":null,"isOnProcess":null,"activityId":null,"childProcessDefinitionKey":null}
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] ---> END HTTP (448-byte body)
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] <--- HTTP/1.1 500  (137ms)
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] connection: close
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] content-type: application/json
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] date: Wed, 07 Apr 2021 08:32:48 GMT
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] processid: 09ce443c-bf60-48db-b4b9-b8300678ac34
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] transfer-encoding: chunked
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] vary: Origin
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] vary: Access-Control-Request-Method
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] vary: Access-Control-Request-Headers
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] 
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] {"errorCode":"PropertyReferenceError","description":"No property caseOpenDttm: DESC found for type BaseCaseEntity!","localizedMessage":"Внутренняя ошибка сервиса","timestamp":"2021-04-07T11:32:48+03:00","details":null}
ru.basecase.BaseCaseFeignClient - [BaseCaseFeignClient#searchCases] <--- END HTTP (241-byte body)
ru.exceptionhandler.GlobalControllerExceptionHandler - [500 ] during [POST] to [http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&sort=caseOpenDttm%3A%20DESC&page=0] [BaseCaseFeignClient#searchCases(FilterSpecification,Pageable)]: [{"errorCode":"PropertyReferenceError","description":"No property caseOpenDttm: DESC found for type BaseCaseEntity!","localizedMessage":"Внутренняя ошибка сервиса","timestamp":"2021-04-07T11:32:48+03:00","details":null}]
feign.FeignException$InternalServerError: [500 ] during [POST] to [http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&sort=caseOpenDttm%3A%20DESC&page=0] [BaseCaseFeignClient#searchCases(FilterSpecification,Pageable)]: [{"errorCode":"PropertyReferenceError","description":"No property caseOpenDttm: DESC found for type BaseCaseEntity!","localizedMessage":"Внутренняя ошибка сервиса","timestamp":"2021-04-07T11:32:48+03:00","details":null}]
	at feign.FeignException.serverErrorStatus(FeignException.java:231)



Я конечно не уверен, но мне кажется что у вас проблема с применением сортировок дальше по стеку вызовов на сервере.

По тексту это ошибка PropertyReferenceException из пакета org.springframework.data.mapping

Нет ли Stack trace с сервера?
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060318
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,


Вот так проходит =(

Код: java
1.
http://172.24.14.103:30750/cpt/api/cases/base/search?serialVersionUID=1232825578694716871&size=10&page=0&sort=caseOpenDttm,DESC



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
2021-04-07 12:11:14,377 [http-nio-30750-exec-10] ERROR d3a85bfc-2f6d-4402-98d7-83f3526b2eb8 ru.exceptionhandler.GlobalControllerExceptionHandler - No property caseOpenDttm: DESC found for type BaseCaseEntity!
org.springframework.data.mapping.PropertyReferenceException: No property caseOpenDttm: DESC found for type BaseCaseEntity!
	at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:94)
	at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:382)
	at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:358)
	at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:311)
	at java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:324)
	at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:293)
	at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:276)
	at org.springframework.data.jpa.repository.query.QueryUtils.toJpaOrder(QueryUtils.java:607)
	at org.springframework.data.jpa.repository.query.QueryUtils.toOrders(QueryUtils.java:560)
	at org.springframework.data.jpa.repository.support.SimpleJpaRepository.getQuery(SimpleJpaRepository.java:697)
	at org.springframework.data.jpa.repository.support.SimpleJpaRepository.getQuery(SimpleJpaRepository.java:651)
	at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:443)
	at sun.reflect.GeneratedMethodAccessor497.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.data.repository.core.support.ImplementationInvocationMetadata.invoke(ImplementationInvocationMetadata.java:72)
	at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:382)
	at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:205)
	at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:549)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:155)
	at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:130)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
	at com.sun.proxy.$Proxy208.findAll(Unknown Source)
	at ru.repository.BaseRepository.findAll(BaseRepository.java:37)
	at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
	at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:86)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
	at com.sun.proxy.$Proxy208.findAll(Unknown Source)
	at ru.entity.service.BaseCaseSearchService.searchCases(BaseCaseSearchService.java:50)
	at ru.entity.service.BaseCaseSearchService$$FastClassBySpringCGLIB$$2859c300.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at net.bull.javamelody.MonitoringSpringInterceptor.invoke(MonitoringSpringInterceptor.java:76)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
	at ru.entity.service.BaseCaseSearchService$$EnhancerBySpringCGLIB$$ab8a2781.searchCases(<generated>)
	at ru.entity.controller.BaseCaseController.searchCases(BaseCaseController.java:86)
	at ru.entity.controller.BaseCaseController$$FastClassBySpringCGLIB$$91b4c19c.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at net.bull.javamelody.MonitoringSpringInterceptor.invoke(MonitoringSpringInterceptor.java:76)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
	at ru.entity.controller.BaseCaseController$$EnhancerBySpringCGLIB$$fd8aa27c.searchCases(<generated>)
	at sun.reflect.GeneratedMethodAccessor514.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:665)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:209)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at ru.web.filter.MdcFilter.doFilterInternal(MdcFilter.java:35)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:239)
	at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:209)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at ru.cptbackend.filter.ExternalUserFilter.doFilter(ExternalUserFilter.java:61)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060325
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже у меня проблема из разряда

https://github.com/spring-cloud/spring-cloud-openfeign/issues/146

Feign версия 11.1
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060337
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Похоже у меня проблема из разряда

https://github.com/spring-cloud/spring-cloud-openfeign/issues/146

Feign версия 11.1


Да, судя по url генерируется не занятая а ': '
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060338
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

Только опять нюанс


Тут один параметр в методе - Pageable
https://github.com/spring-cloud/spring-cloud-openfeign/issues/146#issuecomment-685290144


А у меня два, фильтр и Pageable =(
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060339
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Какая у вас версия spring-cloud-openfeign ?
В 3.0.1 визуально проблема исправлена
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060342
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Как вариант, если версия Spring старая - можете
1) Скопировать https://github.com/spring-cloud/spring-cloud-openfeign/blob/40a2ed5030d83dc7f076d8f533dea0c28e71e723/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/PageableSpringEncoder.java
2) Зарегистрировать этот Encoder в OpenFeign
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060347
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch
-=Koba=-,
Как вариант, если версия Spring старая - можете
1) Скопировать https://github.com/spring-cloud/spring-cloud-openfeign/blob/40a2ed5030d83dc7f076d8f533dea0c28e71e723/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/PageableSpringEncoder.java
2) Зарегистрировать этот Encoder в OpenFeign

Поправка - не зарегистрировать, а обернуть SpringEncoder в него (см FeignClientsConfiguration)
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060356
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch
-=Koba=-,
Какая у вас версия spring-cloud-openfeign ?
В 3.0.1 визуально проблема исправлена


2.2.6 RELEASE

Спасибо сейчас попробую
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060366
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Lelouch
-=Koba=-,
Какая у вас версия spring-cloud-openfeign ?
В 3.0.1 визуально проблема исправлена


2.2.6 RELEASE

Спасибо сейчас попробую

Странно, в 2.2.6 этот фикс уже есть (немного некорректный, но все-же в url должна быть запятая, а не :)
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060371
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Lelouch
-=Koba=-,
Какая у вас версия spring-cloud-openfeign ?
В 3.0.1 визуально проблема исправлена


2.2.6 RELEASE

Спасибо сейчас попробую

Нет, я был не прав, проблема не в этом.
Проблема именно в @SpringQueryMap:
Наличие этой аннотации приводит к следующим шагам преобразования:
1) Pageable преобразуется в Map<String, Object>
2) Map<String, Object> преобразуется в строку запроса

За это отвечает реализация QueryMapEncoder

Если вам нужно передавать pageable в URI, при этом передавая еще и body , то придется делать следующее:
1) Реализовать FeignBuilderCustomizer
2) В рамках этого Customizer необходимо заменить QueryMapEncoder на свою реализацию (метод builder.queryMapEncoder)
3) Примерная реализация:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public class PageableQueryMapEncoder implements QueryMapEncoder {

        private final FieldQueryMapEncoder delegate;
        private final SpringDataWebProperties properies;

        public PageableQueryMapEncoder(final SpringDataWebProperties properties) {
            this.delegate = new FieldQueryMapEncoder();
            this.properies = properties;
        }

        @Override
        public Map<String, Object> encode(Object object) {
            if (object instanceof Pageable) {
                Map<String, Object> result = new HashMap<>();
                Pageable p = (Pageable) object;
                if (p.isPaged()) {
                    result.put(properies.getPageable().getPageParameter(), p.getPageNumber());
                    result.put(properies.getPageable().getSizeParameter(), p.getPageSize());
                }
                if (p.getSort().isSorted()) {
                    List<String> sort = new ArrayList<>();
                    for (Sort.Order order : p.getSort()) {
                        sort.add(order.getProperty() + "," + order.getDirection());
                    }
                    result.put(properies.getSort().getSortParameter(), sort);
                }
                return result;
            }

            return delegate.encode(object);
        }
    }
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060494
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогло обновление spring-cloud-version до версии 3.0.2

Благодарю
...
Рейтинг: 0 / 0
Feign & Pageable
    #40060519
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,

https://github.com/spring-cloud/spring-cloud-openfeign/commit/2a23b6d304bcdb1428e8f390bdb6346c549cb952 - Кстати, вот фикс, примерно совпадает с тем, что я выше написал для старых версий)
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Feign & Pageable
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]