如何使用 MapStruct 将字符串转换为映射?

Joh*_*zar 4 java spring dto spring-boot mapstruct

Story我的 Spring Boot 应用程序中有实体。它的String字段storyInfo包含:

{"title":"random title", "description":"random description"}
Run Code Online (Sandbox Code Playgroud)

对于我的Story实体,我有StoryDTO一个map名为 的字段storyInfo。问题是:如何将String字段从using转换为Stroryin ?MapStoryDTOMapStruct

小智 5

尝试以下代码,灵感来自这里

@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;
      }

}
Run Code Online (Sandbox Code Playgroud)