Spring boot 有没有办法从通量中赋值<;PostData>;流动<;DEData>;?

Spring boot 有没有办法从通量中赋值<;PostData>;流动<;DEData>;?,spring-boot,reactive-programming,spring-webflux,Spring Boot,Reactive Programming,Spring Webflux,我希望在我的应用程序类中有一个方法,通过该方法,我可以创建一个新的DEData流量,并在它完全从API接收数据之后,使用PostData流量相应地为它赋值。我的代码在下面 我的ConnectionManager类: @Service public class ConnectionManager { WebClient webClient = WebClient.create(); public Mono<String> getResponseJSON(Strin

我希望在我的应用程序类中有一个方法,通过该方法,我可以创建一个新的DEData流量,并在它完全从API接收数据之后,使用PostData流量相应地为它赋值。我的代码在下面

我的ConnectionManager类:

@Service
public class ConnectionManager {


    WebClient webClient = WebClient.create();

    public Mono<String> getResponseJSON(String URI)
    {
            return webClient.get().uri(URI).retrieve().bodyToMono(String.class).log();
    }

    public <T> Flux<T> getResponseObjects(String URI,Class<T> t) 
    {
         return webClient.get().uri(URI).retrieve().bodyToFlux(t).log();        
    }

}
@SpringBootApplication
public class WebClientConnectorApplication implements CommandLineRunner{
@Autowired
ConnectionManager connectionManager;
@Autowired
DEData deData;

public static void main(String[] args) {
    SpringApplication.run(WebClientConnectorApplication.class, args);
}

@Override
public void run(String... args) throws Exception {


    connectionManager.getResponseObjects("https://jsonplaceholder.typicode.com/posts/1/comments",PostData.class)
    .flatMap()

}

}
public class PostData {


int postId;
int id;
String name,email,body;

public PostData() {

}

public PostData(int postId, int id, String name, String email, String body) {
    super();
    this.postId = postId;
    this.id = id;
    this.name = name;
    this.email = email;
    this.body = body;
}

public int getPostId() {
    return postId;
}
public void setPostId(int postId) {
    this.postId = postId;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
public String getBody() {
    return body;
}
public void setBody(String body) {
    this.body = body;
}
@Override
public String toString() {
    return "PostData [postId=" + postId + ", id=" + id + ", name=" + name + ", email=" + email + ", body=" + body
            + "]";
}



}
@Component

public class DEData {

int id;
String name,email;

public DEData() {
}

public DEData(int id, String name, String email) {
    super();
    this.id = id;
    this.name = name;
    this.email = email;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
@Override
public String toString() {
    return "DEData [id=" + id + ", name=" + name + ", email=" + email + "]";
}



}
PostData类:

@Service
public class ConnectionManager {


    WebClient webClient = WebClient.create();

    public Mono<String> getResponseJSON(String URI)
    {
            return webClient.get().uri(URI).retrieve().bodyToMono(String.class).log();
    }

    public <T> Flux<T> getResponseObjects(String URI,Class<T> t) 
    {
         return webClient.get().uri(URI).retrieve().bodyToFlux(t).log();        
    }

}
@SpringBootApplication
public class WebClientConnectorApplication implements CommandLineRunner{
@Autowired
ConnectionManager connectionManager;
@Autowired
DEData deData;

public static void main(String[] args) {
    SpringApplication.run(WebClientConnectorApplication.class, args);
}

@Override
public void run(String... args) throws Exception {


    connectionManager.getResponseObjects("https://jsonplaceholder.typicode.com/posts/1/comments",PostData.class)
    .flatMap()

}

}
public class PostData {


int postId;
int id;
String name,email,body;

public PostData() {

}

public PostData(int postId, int id, String name, String email, String body) {
    super();
    this.postId = postId;
    this.id = id;
    this.name = name;
    this.email = email;
    this.body = body;
}

public int getPostId() {
    return postId;
}
public void setPostId(int postId) {
    this.postId = postId;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
public String getBody() {
    return body;
}
public void setBody(String body) {
    this.body = body;
}
@Override
public String toString() {
    return "PostData [postId=" + postId + ", id=" + id + ", name=" + name + ", email=" + email + ", body=" + body
            + "]";
}



}
@Component

public class DEData {

int id;
String name,email;

public DEData() {
}

public DEData(int id, String name, String email) {
    super();
    this.id = id;
    this.name = name;
    this.email = email;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
@Override
public String toString() {
    return "DEData [id=" + id + ", name=" + name + ", email=" + email + "]";
}



}
DEData类:

@Service
public class ConnectionManager {


    WebClient webClient = WebClient.create();

    public Mono<String> getResponseJSON(String URI)
    {
            return webClient.get().uri(URI).retrieve().bodyToMono(String.class).log();
    }

    public <T> Flux<T> getResponseObjects(String URI,Class<T> t) 
    {
         return webClient.get().uri(URI).retrieve().bodyToFlux(t).log();        
    }

}
@SpringBootApplication
public class WebClientConnectorApplication implements CommandLineRunner{
@Autowired
ConnectionManager connectionManager;
@Autowired
DEData deData;

public static void main(String[] args) {
    SpringApplication.run(WebClientConnectorApplication.class, args);
}

@Override
public void run(String... args) throws Exception {


    connectionManager.getResponseObjects("https://jsonplaceholder.typicode.com/posts/1/comments",PostData.class)
    .flatMap()

}

}
public class PostData {


int postId;
int id;
String name,email,body;

public PostData() {

}

public PostData(int postId, int id, String name, String email, String body) {
    super();
    this.postId = postId;
    this.id = id;
    this.name = name;
    this.email = email;
    this.body = body;
}

public int getPostId() {
    return postId;
}
public void setPostId(int postId) {
    this.postId = postId;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
public String getBody() {
    return body;
}
public void setBody(String body) {
    this.body = body;
}
@Override
public String toString() {
    return "PostData [postId=" + postId + ", id=" + id + ", name=" + name + ", email=" + email + ", body=" + body
            + "]";
}



}
@Component

public class DEData {

int id;
String name,email;

public DEData() {
}

public DEData(int id, String name, String email) {
    super();
    this.id = id;
    this.name = name;
    this.email = email;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
@Override
public String toString() {
    return "DEData [id=" + id + ", name=" + name + ", email=" + email + "]";
}



}

您想要的是从API调用创建一个新的流量

调整模型

PostData

@数据
@诺尔格构装师
@AllArgsConstructor
公共类PostData{
私人int postId;
私有int-id;
私有字符串名称;
私人字符串电子邮件;
私有字符串体;
}
德塔塔

@数据
@建筑商
公共类数据{
私有int-id;
私有字符串名称;
私人字符串电子邮件;
}
客户


@组成部分
公共类测试客户端{
WebClient WebClient=WebClient.create();
公共流量GetResponseObject(字符串uri,类t){
返回webClient.get().uri(uri.retrieve().bodyToFlux(t);
}
}
服务(您应该在主应用程序中放置的内容)

@服务
公共类ServiceImpl{
@自动连线
私有测试客户端;
公共流量GetNewFluxEdata(){
返回testClient.GetResponseObject(“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
@请求映射(“/test”)
公共类测试控制器{
@自动连线
ServiceImpl ServiceImpl;
@GetMapping(value=“/de data”,products=MediaType.APPLICATION\u STREAM\u JSON\u value)
公共流量上传简单(){
返回serviceImpl.getNewFluxEdata();
}
}
输出生成MediaType.APPLICATION_JSON_值

[
    {
        "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"
    }
              .
              .
              .
]

    {
        "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\u STREAM\u JSON\u值

[
    {
        "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"
    }
              .
              .
              .
]

    {
        "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"
    }
              .
              .
              .


如果您的要求是等待Flux完成,请使用
collectList
,然后使用flatMap可以将列表转换为FluxYour DEData类不应是@Component@akreddy.21你能帮我查一下代码,收集列表和平面图吗