Использование языка запросов с помощью Querydsl из другой микросервиса Spring Boot - PullRequest
0 голосов
/ 07 мая 2020

У меня есть микросервис Spring Boot, работающий с Eureka, Spring Gateway и Feign Clients, чтобы общаться друг с другом. Также у меня есть микросервис, который использует Spring Data JPA + Querydsl для легкого поиска / фильтрации ресурсов.

Мне нужно использовать эту конечную точку из другого микросервиса. Итак, у меня есть что-то вроде этого.

Микросервис A с контроллером:

@GetMapping
    public ResponseEntity<Page<MyResourceDto>> findMyResource(
            @QuerydslPredicate(root = MyResource.class) Predicate predicate, Pageable 
pageable,
            @RequestParam(required = false) boolean isPaged) { ... }

Микросервис B со следующим фальшивым клиентом:

@FeignClient(contextId = "myResourceClientService", name = "microservicea")
@RequestMapping("${microservicea.context-path:}/myResource")
public interface MyResourceClientService{

    @GetMapping
    public PageImpl<MyResourceDto> findMyResource(
                @QuerydslPredicate(root = MyResource.class) Predicate predicate, @RequestParam(name = 
"isPaged", required = false) boolean isPaged,
            @RequestParam(name = "page", required = false) int page,
            @RequestParam(name = "size", required = false) int size);
}

Но когда я запускаю В приведенном выше коде возникает следующее исключение:

org.codehaus.jackson.map.JsonMappingException: Direct self-reference leading to cycle (through reference chain: com.querydsl.core.types.dsl.BooleanOperation["args"]->com.google.common.collect.RegularImmutableList[0]->com.querydsl.core.types.PathImpl["metadata"]->com.querydsl.core.types.PathMetadata["parent"]->co.com.coomeva.mimutualreclamaciones.modelo.QMyResource["id"]->com.querydsl.core.types.dsl.StringPath["root"]->com.querydsl.core.types.PathImpl["root"])

Есть ли способ правильно отправить предикат через другое приложение Java?

...