使用RestTemplate将JSON映射到对象

编程入门 行业动态 更新时间:2024-10-15 02:26:33
本文介绍了使用RestTemplate将JSON映射到对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我编写了货币转换器程序,该程序从api.fixer.io读取JSON,映射对象并创建选定汇率的简单数据集。 我的程序一直工作得很好,直到我停止使用Jackson解析和映射对象,并将其替换为RestTemplate。 它可以很好地读取基础货币和日期,但不能读取Rates子对象。为什么?

我的代码: Currency类:

package com.github.gromo13.currencyConverter.model.util; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) public class Currency { private String base; private String date; private Rates rates; public Currency() { } public String getBase() { return this.base; } public void setBase(String base) { this.base = base; } public String getDate() { return this.date; } public void setDate(String date) { this.date = date; } public Rates getRates() { return this.rates; } public void setRates(Rates rates) { this.rates = rates; } public double getRate(String currencyCode) { return rates.getRate(currencyCode); } }

Rates类:

package com.github.gromo13.currencyConverter.model.util; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) public class Rates { private double eur; private double pln; private double usd; public double getEur() { return this.eur; } public void setEur(double eur) { this.eur = eur; } public double getPln() { return this.pln; } public void setPln(double pln) { this.pln = pln; } public double getUsd() { return this.usd; } public void setUsd(double usd) { this.usd = usd; } public double getRate(String currencyCode) { currencyCode = currencyCode.toUpperCase(); switch (currencyCode) { case "EUR": return this.eur; case "PLN": return this.pln; case "USD": return this.usd; default: return 1; } } }

Repository必须使用RestTemplate映射Currency对象的类:

package com.github.gromo13.currencyConverter.repository; import com.github.gromo13.currencyConverter.model.util.Currency; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.web.client.RestTemplate; @Repository public class FixerIoCurrencyRepository implements CurrencyRepository { @Autowired private RestTemplate restTemplate; public void setRestTemplate(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @Override public Currency getCurrency(String currencyCode) { Currency currency = restTemplate.getForObject("api.fixer.io/latest?base={currencyCode}", Currency.class, currencyCode); return currency; } }

Sample JSON data I am trying to parse and map

我正在使用这个Currency对象准备DataSet对象和<currencyName, rate>的简单映射,并将其打印到视图中的表格中。一切正常,我只是每次都收到0作为每种货币的汇率。

推荐答案

问题在于,在Rates中,类属性为小写,而在JSON数据中为大写。

您可以在@Configuration类中定义RestTemplate以使用接受不区分大小写的属性。这样,您就不必更改Rates属性的格式。

@Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); return mapper; } @Bean public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(objectMapper()); return converter; } @Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(0, mappingJacksonHttpMessageConverter()); return restTemplate; }

更多推荐

使用RestTemplate将JSON映射到对象

本文发布于:2023-11-26 08:45:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1633428.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   RestTemplate   JSON

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!