【发布时间】:2020-05-18 21:24:54
【问题描述】:
我想要我的应用程序类中的一个方法,通过它我可以创建一个新的 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()
}
}
PostData 类:
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
+ "]";
}
}
DEData 类:
@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 + "]";
}
}
【问题讨论】:
-
如果您的要求是等到 Flux
完成,请使用 collectList然后使用 flatMap 您可以将 List转换为 Flux -
你的 DEData 类不应该是 @Component
-
@akreddy.21 你能帮我处理一下代码、collectList 和 Flatmap
标签: spring-boot reactive-programming spring-webflux