вам нужно создать новый поток из вызова API.
Настройка ваших моделей
PostData
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PostData {
private int postId;
private int id;
private String name;
private String email;
private String body;
}
DEData
@Data
@Builder
public class DEData {
private int id;
private String name;
private String email;
}
Клиент
@Component
public class TestClient {
WebClient webClient = WebClient.create();
public <T> Flux<T> getResponseObjects(String uri, Class<T> t) {
return webClient.get().uri(uri).retrieve().bodyToFlux(t);
}
}
Служба (что вы должны поместить в свое основное приложение)
@Service
public class ServiceImpl {
@Autowired
private TestClient testClient;
public Flux<DEData> getNewFluxDEData() {
return testClient.getResponseObjects("https://jsonplaceholder.typicode.com/posts/1/comments", PostData.class)
.flatMap(postData -> Mono.just(DEData.builder()
.id(postData.getId())
.email(postData.getEmail())
.name(postData.getName())
.build()));
}
}
Контроллер
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
ServiceImpl serviceImpl;
@GetMapping(value = "/de-data", produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
public Flux<DEData> uploadSimple() {
return serviceImpl.getNewFluxDEData();
}
}
вывод производит MediaType.APPLICATION_JSON_VALUE
[
{
"id": 1,
"name": "id labore ex et quam laborum",
"email": "Eliseo@gardner.biz"
},
{
"id": 2,
"name": "quo vero reiciendis velit similique earum",
"email": "Jayne_Kuhic@sydney.com"
},
{
"id": 3,
"name": "odio adipisci rerum aut animi",
"email": "Nikita@garfield.biz"
}
.
.
.
]
выводит MediaType.APPLICATION_STREAM_JSON_VALUE
{
"id": 1,
"name": "id labore ex et quam laborum",
"email": "Eliseo@gardner.biz"
}
{
"id": 2,
"name": "quo vero reiciendis velit similique earum",
"email": "Jayne_Kuhic@sydney.com"
}
{
"id": 3,
"name": "odio adipisci rerum aut animi",
"email": "Nikita@garfield.biz"
}
.
.
.