我的 Spring Boot 应用程序中有 Story
实体。它具有字符串
字段 storyInfo
,其中包含:
{"title":"random title", "description":"random description"}
对于我的故事实体,
我有StoryDTO
,地图
字段称为故事信息
。问题是:如何使用MapStruct
将
Strory中的Strory
字符串字段转换为StoryDTO
中的Map?
已经提供的答案很好地解释了如何提供服务来使用Jackson进行映射。
为了使用MapStruct实现这一点,您可以使用限定符并相应地注释您的服务。
举个例子
@Qualifier // from the MapStruct package
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface FromJson {
}
public interface StringToMapConverter {
@FromJson
Map<String, String> convert(String string);
}
@Mapper(componentModel = "spring")
public interface MyMapper {
@Mapping(target = "storyInfo", qualifiedBy = FromJson.class)
StoryDTO convert(Story story);
}
< code > StringToMapConverter 的实现应该与已经提供的答案一样。您不必为转换器使用专用接口,您也可以使用抽象映射器,注入< code>ObjectMapper并完成其余相同的操作。
然后,MapStruct 将使用它来将 storyInfo
String
转换为地图。
其他一些可能的解决方案,不在问题的范围内,如果您使用Hibernate。您可以使用<code>映射
尝试下面的代码,从这里得到启发
@Mapper(componentModel = "spring")
public interface StoryMapper {
@Mappings({
@Mapping(source = "storyInfo", target = "storyInfo", qualifiedByName = "fromJsonToMap")
})
StoryDTO toStoryDTO(Story story);
@Mappings({
@Mapping(source = "storyInfo", target = "storyInfo", qualifiedByName = "fromMapToJson")
})
Story toStory(StoryDTO storyDTO);
@Named("fromJsonToMap")
default Map<String, Object> fromJsonToMap(String storyInfo) throws IOException {
if (Objects.nonNull(storyInfo)) {
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Double> result = objectMapper.readValue(storyInfo, new TypeReference<Map<String, Object>>() {});
return result;
}
return null;
}
@Named("fromMapToJson")
default String fromMapToJson(Map<String, Object> storyInfo) throws JsonProcessingException {
if (Objects.nonNull(storyInfo)) {
ObjectMapper objectMapper = new ObjectMapper();
String result = objectMapper.writeValueAsString(storyInfo);
return result;
}
return null;
}
}
谢谢各位的回答。通过向MapStruct的< code>StoryMapper接口添加一些手动映射器,我找到了最简单的解决方案。
// Manual convert to Map
default Map toMap(String text){
Map map = new HashMap();
try {
map = new ObjectMapper().readValue(text, new TypeReference<Map<String, String>>(){});
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
// Manual convery from map
default String fromMap(Map map){
return new JSONObject(map).toString();
}
我们可以使用StreamApi将上面的字符串转换为字符流吗?
问题内容: 我正在阅读有关python的新f字符串的 博客 ,它们看起来很整洁。但是,我希望能够从字符串或文件中加载f字符串。 我似乎找不到任何执行此操作的字符串方法或其他函数。 从上面我的链接中的示例: 但是,如果我有琴弦怎么办?我希望能够像这样: 事实证明,我已经可以执行类似的操作并获得性能提高。即: 问题答案: f字符串是代码。不仅以安全的方式(当然,字符串文字就是代码),而且以危险的任意代
我是Mapstruct的新手,我正在努力正确理解它。 我想实现的是从DTO字符串参数(carModel)转换为他的实体,使用服务和存储库进行检索。 问题是Mapstruct生成的Mapper类正在尝试向Service类注入注释,但它不起作用。服务为空。 这是我的课程: 类: 类: DTO和实体类: 构建工作正常,但当我尝试使用Mapper时,应用程序停止。它说carModelService是空的。
我正在尝试从json转换为Java对象。我收到一个json字符串,其中包括一个书籍列表: 我创建了一个名为Books的对象: 另外,我正在使用doGet方法从RESTful webservice中以以下方式检索这些数据: 干杯
问题内容: 我有一个,我需要一个。如何从一个转换为另一个? 问题答案: 好问题。我有以下五种 6种方法可以做到这一点。 注意:返回。因此有效地两者是相同的。 调用,这又设置了数组。 另一方面,调用以下程序包私有构造函数。 从源代码中的Java 8的源代码 因此似乎是最有效的方法,在这两个存储器和速度方面,用于转换char到String。
问题内容: 我一直在尝试使用 GZIPOutputStream 等,但在理解它们方面没有成功。我要做的就是将字符串- “字符串” 转换为GZIP Base64格式。我怎样才能做到这一点? 编辑: 通过GZIP Base64格式,我的意思是字符串首先使用GZIP压缩,然后转换为Base64 问题答案: 使用Apache Commons Codec 。 这是一个示例类: 哪个输出: 在Linux下,您