Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Feign & Pageable / 24 сообщений из 24, страница 1 из 1
06.04.2021, 17:48
    #40060194
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
Подскажите как правильно настроить работу 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
06.04.2021, 18:26
    #40060202
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
...
Рейтинг: 0 / 0
06.04.2021, 18:40
    #40060207
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
А зачем нужен этот Feign вкратце? Перевод говорит что это - "симулировать и притворятся"...
...
Рейтинг: 0 / 0
06.04.2021, 18:46
    #40060209
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
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
06.04.2021, 20:09
    #40060216
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
mayton
А зачем нужен этот Feign вкратце? Перевод говорит что это - "симулировать и притворятся"...

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


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

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


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

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


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

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


Нет, это часть spring cloud. Само discovery зависит от инфраструктуры, есть разные реализации для Eureka, Zookeeper, Kubernetes, etc.
Конкретно для feign переопределяется реализация Http клиента (если я правильно помню)
...
Рейтинг: 0 / 0
07.04.2021, 11:36
    #40060302
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
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
07.04.2021, 11:42
    #40060304
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
Исходный запрос

Код: 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
07.04.2021, 11:49
    #40060308
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
-=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
07.04.2021, 12:13
    #40060318
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
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
07.04.2021, 12:27
    #40060325
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
Похоже у меня проблема из разряда

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

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

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

Feign версия 11.1


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

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


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


А у меня два, фильтр и Pageable =(
...
Рейтинг: 0 / 0
07.04.2021, 13:12
    #40060339
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
-=Koba=-,
Какая у вас версия spring-cloud-openfeign ?
В 3.0.1 визуально проблема исправлена
...
Рейтинг: 0 / 0
07.04.2021, 13:23
    #40060342
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
-=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
07.04.2021, 13:33
    #40060347
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
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
07.04.2021, 13:53
    #40060356
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
Lelouch
-=Koba=-,
Какая у вас версия spring-cloud-openfeign ?
В 3.0.1 визуально проблема исправлена


2.2.6 RELEASE

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


2.2.6 RELEASE

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

Странно, в 2.2.6 этот фикс уже есть (немного некорректный, но все-же в url должна быть запятая, а не :)
...
Рейтинг: 0 / 0
07.04.2021, 14:37
    #40060371
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
-=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
07.04.2021, 18:20
    #40060494
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Feign & Pageable
Помогло обновление spring-cloud-version до версии 3.0.2

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

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


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