首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用jackson将平面yaml文件转换为java中的hashmap。

尝试使用jackson将平面yaml文件转换为java中的hashmap。
EN

Stack Overflow用户
提问于 2020-01-22 11:04:07
回答 1查看 308关注 0票数 0

我正在尝试转换一个扁平的yaml文件,如下所示

代码语言:javascript
复制
aramex: "Aramex"
aramex_cash_on_delivery: "Aramex COD"
australia_post: "Australia Post"
boxberry_delivery: "Boxberry Delivery"
boxberry_locker: "Boxberry Pickup and Postamats"
boxit_delivery: "BoxIt Home Delivery"
boxit_locker: "BoxIt Locker & Store Pickup"
chronopost: "Chronopost"

到hashmap中,这样我就可以直接从键访问它,而不必维护额外的文件。

例如:

代码语言:javascript
复制
map.get("aramex"); // should return "Aramex"

我更希望我不需要向pojo添加属性,因为这对我来说是更多的维护。有没有什么例子可以说明杰克逊是怎么做到的呢?

EN

回答 1

Stack Overflow用户

发布于 2020-01-22 11:41:31

我最终使用了如下的yaml文件:

代码语言:javascript
复制
shipping_options:
  aramex: "Aramex"
  aramex_cash_on_delivery: "Aramex COD"
  australia_post: "Australia Post"
  boxberry_delivery: "Boxberry Delivery"
  boxberry_locker: "Boxberry Pickup and Postamats"

像这样的pojo:

代码语言:javascript
复制
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ShippingOptions {
  @JsonProperty("shipping_options")
  Map<String, String> shippingOptions;
}

以及获取密钥的代码:

代码语言:javascript
复制
public static String getShippingOptionValue(String key) throws IOException {
    String baseDir = System.getProperty("user.dir");
    String filePath = baseDir + "/src/test/resources/shippingoptions.yaml";
    File yaml = new File(filePath);
    ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
    mapper.findAndRegisterModules();
    ShippingOptions shippingOptions = null;
    try {
      shippingOptions = mapper.readValue(yaml, ShippingOptions.class);
    } catch (FileNotFoundException e) {
      log.info("file could not be found {}", filePath);
    } catch (IOException e) {
      log.info("could not load shipping options from {}", filePath);
      throw new IOException("shipping options YAML file was unable to be converted by Jackson {}", e);
    }
    assert shippingOptions != null;
    String value = shippingOptions.getShippingOptions().get(key);
    log.info("Shipping option retrieved was {}", value);
  }

希望这能帮助到一些人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59852043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档