为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 春季引导中从 XML 加载属性的正确方法

在 Java 春季引导中从 XML 加载属性的正确方法

慕妹3242003 2022-09-21 21:44:09

我有XML文件,其中存储了国家/地区。每个国家/地区元素都具有区域、次区域、国家/地区代码等属性。我有服务,应该解析XML并根据提供的国家/地区名称获取区域。有没有办法将数据从xml加载和使用到内存中,这样我就不需要每次想要获取国家/地区的区域时都解析XML?我不想使用枚举,因为我希望有可更新的xml列表,该列表仅在应用程序启动或首次使用我的服务时解析一次。因此,在XML更新之后,服务器重新启动就足够了,而无需重建应用程序来更新枚举。如何实现这一点?


查看完整描述

1 回答

?
白板的微信

TA贡献1539条经验 获得超3个赞

我碰巧有一个类似的解决方案,很容易复制/粘贴到一个工作示例中。


如果您的 XML 如下所示:


<countries>

    <country name="England" region="Europe"

        subregion="Western Europe" countryCode="eng" />

    <country name="Scotland" region="Europe"

        subregion="West Europe" countryCode="sco" />

</countries>

你有一个类型,因此:Country


public class Country {

    private String name;

    private String region;

    private String subregion;

    private String countryCode;


    // getters and setters

}

然后将以下依赖项添加到项目中:


com.fasterxml.jackson.dataformat:jackson-dataformat-xml


<dependency>

    <groupId>com.fasterxml.jackson.dataformat</groupId>

    <artifactId>jackson-dataformat-xml</artifactId>

</dependency>

和这段代码:


public class JacksonXml {

    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {

        InputStream is = JacksonXml.class.getResourceAsStream("/countries.xml");


        XmlMapper xmlMapper = new XmlMapper();


        List<Country> countries = xmlMapper.readValue(is, new TypeReference<List<Country>>() {

        });


        Map<String, Country> nameToCountry = countries.stream()

                                                      .collect(Collectors.toMap(Country::getName, Function.identity()));


        System.out.println(nameToCountry.get("England")

                                        .getRegion());

    }


}

将产生:


Europe


查看完整回答
反对 回复 2022-09-21

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信