Spring cloud Feign Client returns partial data from polymorphed dto

53 views Asked by At

I'm new to FeignClient configuration. Got some issues with response over feign.

some of dependencies:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

I got working services A and B. Service A uses FeignClient to send request to service B

classes for Service B:

@Data
@NoArgsConstructor
@SuperBuilder
@AllArgsConstructor
public class ResponseBDTO{
    private String field1;
}

@Data
@NoArgsConstructor
@SuperBuilder
@AllArgsConstructor
public class ResponseBDetailedDTO extends ResponseBDTO{
    private String field2;
    private MetadataDTO metadataDTO;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class MetadataDTO {
    private String field3;
}


@AllArgsConstructor
@RestController
public class serviceBController {

    @GetMapping("api/serviceB/{details}")
    public ResponseBDTO getResponseB(@PathVariable boolean details){
        if(details){
            return ResponseBDetailedDTO.builder()....build();
        }
        return ResponseBDTO.builder()....build();
    }

}

when sending request directly to service B it returns ResponseBDetailedDTO(which extends ResponseBDTO!) or ResponseBDTO as desired depending on boolean details argument.

Service A:

@AllArgsConstructor
@RestController
public class serviceAController {

@GetMapping("/api")
public ResponseBDTO getResponseB(@PathVariable boolean details){
    return serviceBClient.getResponseB(details)
}
}


feign client:

@FeignClient("serviceB")
public interface serviceBClient {

    @GetMapping("api/serviceB/{details}")
    public ResponseBDTO getResponseB(@PathVariable("details") boolean details);

}

when sending request to service A controller - it always returns ResponseBDTO (base class) for both boolean details true and false.

In general communication using feign works well for all endpoints and acts as required. The only problem is to get ResponseBDetailedDTO - child class. Any suggestions please? :)

0

There are 0 answers