我有一个关于Spring WebFlux和Reactor的问题。我试图编写一个简单的场景,其中在GETendpoint中,我返回一个表示实体的DTO流,这些实体中的每一个都有一个表示另一个实体的其他DTO的集合。以下是详细信息。
我有两个实体,Person和Song,定义如下:
@Data
public class Person {
@Id
private Long id;
private String firstName;
private String lastName;
}
@Data
public class Song {
@Id
private Long id;
private String title;
private Long authorId;
}
这些实体由以下DTO表示:
@Data
public class SongDTO {
private Long id;
private String title;
public static SongDTO from(Song s) {
// converts Song to its dto
}
}
@Data
public class PersonDTO {
private Long id;
private String firstName;
private String lastName;
private List<SongDTO> songs = new ArrayList<>();
public static PersonDTO from(Person p, List<Song> songs) {
// converts person to its dto, invokes SongDTO.from on each song
// and adds the result to personDTO.songs
}
}
我的服务(为了简洁起见,这里没有显示)确实返回Mono和flux。然后我就有了以下RESTController:
@RestController
@RequestMapping("/people")
public class PersonController {
@Autowired PersonService people;
@Autowired SongService songs;
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public Flux<PersonDTO> findAllPeople() {
return people.findAll()
.map(person -> PersonDTO.from(person, /* HERE */ new ArrayList<>()));
// TODO: find the songs of each author reactively and put the results in personDTO.songs
}
}
现在,我的问题是:我如何
我试图查看Reactor的文档,但没有成功,搜索了其他StackOverflow问题和整个互联网,但没有找到任何东西,很可能是因为我不确定如何表达我的搜索。有人能提供提示吗?
谢谢。
您可以使用FlatMap
+Map
:
people.findAll()
.flatMap(person -> songs.findByAuthorId(person.getId())
.collectList()
.map(songList -> PersonDTO.from(person, songList)));
问题内容: 我已经看过其他几个问题,但似乎无法弄清楚它们中的任何一个,所以这是我的问题,我想要一个div或span,当您将鼠标悬停在它上面时,就会出现一个区域,就像是一滴水下。 例如我有一个div,我想将鼠标悬停在上面,并让它显示有关我悬停的项目的一些信息 但这似乎不起作用,我不知道为什么…,如果有办法在CSS中做到这一点,我想知道,但是我想要任何和所有建议。 问题答案: 仅当隐藏的div是用于悬
问题内容: 我想将一个DIV元素移到另一个元素中。例如,我要移动此对象(包括所有子对象): 到这个: 这样我有: 问题答案: 曾经尝试过普通的JavaScript … 吗?
问题内容: 我想将一个DIV元素移到另一个元素中。例如,我要移动此对象(包括所有子对象): 到这个: 这样我有: 问题答案: 曾经尝试过普通的JavaScript … 吗?
我想知道流(或收集器)中是否已经实现了一个功能,它首先按属性对流进行分组,然后返回列表中按另一个属性排序的第一个元素。例如,以下代码尝试使用第一个属性对对象流进行分组,然后希望收集第二个属性值最高的对象。 现在,我想用流myClassStream实现类似的功能- 我的代码使用简单的循环是: 任何帮助将不胜感激。
我有一个流量和单声道如下: 但是传递和处理相同的会导致错误。我怎样才能做到以上?谢了!
问题内容: 我对CSS选择器有疑问。仅当在具有类名的a中时,如何选择具有特定类名的a ?这个CSS类在其他地方使用,我不想在任何地方更改样式。 问题答案: 只需在父元素和后代元素之间使用CSS后代选择器(空格)即可: 在这种情况下,仅适用于Class的规则,前提是其祖先是该Class的规则。相反,您可以使用直接子组合器,但是您必须指定与每个父/祖先的关系,直到需要其类的父子/祖先,这可能很难维护C