如何使用地图中的嵌入式集合填充对象?
How to populate an object with embedded collection from a Map?
我正在尝试使用 Dozer 解决此问题,但尚未找到相关信息:
我想使用 Dozer 从 http 请求参数填充一个嵌入式集合。
我可以使用请求参数 java.util.Map(如下面的“requestMap”),条目如下所示:
Map<String, String> requestMap (key -> value) =
- "id" -> "15"
- "title" -> "Nice article about electric cars"
- "comments[0].text" -> "comment 1"
- "comments[1].text" -> "comment 2"
我要填充的 bean:
public class Article {
int id;
String title;
List<Comment> comments;
}
public class Comment {
String text;
}
当我使用 "mapper.map(requestMap, article)" 时,文章 "title" 和 "id" 属性会很好地从地图中填充。但是,"comments" 集合不会被填充。
Dozer 是否也应该能够填充该集合?我需要做什么才能填充它?
Map当然可以有集合。
当您使用地图时,您只能有两个参数 --> 例如 Map<Integer, String>
。
这就是为什么您需要一个 key/id 和一个对象。在这种情况下,您可以映射文章及其 ID。
public class Article {
int id;
String title;
List<String> comments; //IMO you don't need class for comments(comment = string)
}
Map<Integer, Article>
其中 key == id
在您的文章中。
检查 this link 关于如何映射来自 Dozer 的集合
我认为 Dozer
不够聪明,无法将此映射:comments[0].text
到 Comment
的 List
。
您可以手动从 requestMap
中提取您的值并从中制作一个列表。
List<Comment> comments = map.entrySet().stream()
.filter(entry -> entry.getKey().startsWith("comments"))
.map(entryTwo -> new Comment(entryTwo.getValue()))
.collect(Collectors.toList());
然后将其包含在您的文章中:
article.setComments(comments);
我正在尝试使用 Dozer 解决此问题,但尚未找到相关信息:
我想使用 Dozer 从 http 请求参数填充一个嵌入式集合。
我可以使用请求参数 java.util.Map(如下面的“requestMap”),条目如下所示:
Map<String, String> requestMap (key -> value) =
- "id" -> "15"
- "title" -> "Nice article about electric cars"
- "comments[0].text" -> "comment 1"
- "comments[1].text" -> "comment 2"
我要填充的 bean:
public class Article {
int id;
String title;
List<Comment> comments;
}
public class Comment {
String text;
}
当我使用 "mapper.map(requestMap, article)" 时,文章 "title" 和 "id" 属性会很好地从地图中填充。但是,"comments" 集合不会被填充。
Dozer 是否也应该能够填充该集合?我需要做什么才能填充它?
Map当然可以有集合。
当您使用地图时,您只能有两个参数 --> 例如 Map<Integer, String>
。
这就是为什么您需要一个 key/id 和一个对象。在这种情况下,您可以映射文章及其 ID。
public class Article {
int id;
String title;
List<String> comments; //IMO you don't need class for comments(comment = string)
}
Map<Integer, Article>
其中 key == id
在您的文章中。
检查 this link 关于如何映射来自 Dozer 的集合
我认为 Dozer
不够聪明,无法将此映射:comments[0].text
到 Comment
的 List
。
您可以手动从 requestMap
中提取您的值并从中制作一个列表。
List<Comment> comments = map.entrySet().stream()
.filter(entry -> entry.getKey().startsWith("comments"))
.map(entryTwo -> new Comment(entryTwo.getValue()))
.collect(Collectors.toList());
然后将其包含在您的文章中:
article.setComments(comments);