Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Springboot-将JSON转换为JAVA_Json_Spring Boot_Resttemplate - Fatal编程技术网

Springboot-将JSON转换为JAVA

Springboot-将JSON转换为JAVA,json,spring-boot,resttemplate,Json,Spring Boot,Resttemplate,我需要从RESTAPI中获取货币汇率,并将JSON响应转换为Java类。API将给我以下响应:- { "USD_INR": { "val": 71.884966 } } 代码如下所示: @RestController public class MainController { @Autowired private RestTemplate restTemplate; @GetMapping("/hello") public float hel

我需要从RESTAPI中获取货币汇率,并将JSON响应转换为Java类。API将给我以下响应:-

{
    "USD_INR": {
        "val": 71.884966
    }
}
代码如下所示:

@RestController
public class MainController {

  @Autowired
  private RestTemplate restTemplate;

  @GetMapping("/hello")
  public float hello(){

     ExchangeRate exchangeRate = restTemplate.getForObject("https://free.currencyconverterapi.com/api/v6/convert?q=Source_Target&compact=y",ExchangeRate.class);
     return exchangeRate.getSource_Target().getVal();
  }
}
-

在执行REST调用之后,我得到null异常。一无所获。我在这里搞不清楚这个问题。请提供帮助

您可以使用它轻松地从json生成java bean

JSON:

}

对应的Java bean:

-----------------------------------com.example.Example.java-----------------------------------

package com.example;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"USD_INR"
})
public class Example implements Serializable
{

@JsonProperty("USD_INR")
private USDINR uSDINR;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
private final static long serialVersionUID = -932753391825750904L;

@JsonProperty("USD_INR")
public USDINR getUSDINR() {
return uSDINR;
}

@JsonProperty("USD_INR")
public void setUSDINR(USDINR uSDINR) {
this.uSDINR = uSDINR;
}

public Example withUSDINR(USDINR uSDINR) {
this.uSDINR = uSDINR;
return this;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

public Example withAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
return this;
}

}
-----------------------------------com.example.USDINR.java-----------------------------------

package com.example;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"val"
})
public class USDINR implements Serializable
{

@JsonProperty("val")
private Double val;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
private final static long serialVersionUID = -6384976748235176082L;

@JsonProperty("val")
public Double getVal() {
return val;
}

@JsonProperty("val")
public void setVal(Double val) {
this.val = val;
}

public USDINR withVal(Double val) {
this.val = val;
return this;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

public USDINR withAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
return this;
}

}
------------------------------------com.example.example.java-----------------------------------
包com.example;
导入java.io.Serializable;
导入java.util.HashMap;
导入java.util.Map;
导入com.fasterxml.jackson.annotation.JsonAnyGetter;
导入com.fasterxml.jackson.annotation.JsonAnySetter;
导入com.fasterxml.jackson.annotation.JsonIgnore;
导入com.fasterxml.jackson.annotation.JsonInclude;
导入com.fasterxml.jackson.annotation.JsonProperty;
导入com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
“美元卢比”
})
公共类示例实现了可序列化
{
@JsonProperty(“美元卢比”)
私人股本美元卢比美元卢比;
@杰索尼奥雷
私有映射additionalProperties=new HashMap();
私有最终静态长serialVersionUID=-932753391825750904L;
@JsonProperty(“美元卢比”)
公共USDINR getUSDINR(){
返回美元卢比;
}
@JsonProperty(“美元卢比”)
公共作废设置USDINR(USDINR USDINR){
这是。uSDINR=uSDINR;
}
以USDINR(USDINR USDINR)作为公共示例{
这是。uSDINR=uSDINR;
归还这个;
}
@JsonAnyGetter
公共映射getAdditionalProperties(){
返回此。附加属性;
}
@JSONANYSETER
public void setAdditionalProperty(字符串名称、对象值){
this.additionalProperties.put(名称、值);
}
带有AdditionalProperty(字符串名称、对象值)的公共示例{
this.additionalProperties.put(名称、值);
归还这个;
}
}
-----------------------------------com.example.USDINR.java-----------------------------------
包com.example;
导入java.io.Serializable;
导入java.util.HashMap;
导入java.util.Map;
导入com.fasterxml.jackson.annotation.JsonAnyGetter;
导入com.fasterxml.jackson.annotation.JsonAnySetter;
导入com.fasterxml.jackson.annotation.JsonIgnore;
导入com.fasterxml.jackson.annotation.JsonInclude;
导入com.fasterxml.jackson.annotation.JsonProperty;
导入com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
“瓦尔”
})
公共类USDINR实现可序列化
{
@JsonProperty(“val”)
私人双重增值税;
@杰索尼奥雷
私有映射additionalProperties=new HashMap();
私有最终静态长serialVersionUID=-6384976748235176082L;
@JsonProperty(“val”)
公共双getVal(){
返回val;
}
@JsonProperty(“val”)
公共无效设置值(双值){
this.val=val;
}
带val的公共美元卢比(双倍val){
this.val=val;
归还这个;
}
@JsonAnyGetter
公共映射getAdditionalProperties(){
返回此。附加属性;
}
@JSONANYSETER
public void setAdditionalProperty(字符串名称、对象值){
this.additionalProperties.put(名称、值);
}
公共USDINR withAdditionalProperty(字符串名称、对象值){
this.additionalProperties.put(名称、值);
归还这个;
}
}

您的ExchangeRate类应为:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ExchangeRate {
    @JsonProperty("USD_INR")
    Source_Target SourceTargetObject;

    public Source_Target getSource_Target() {
        return SourceTargetObject;
    }

    public void setSource_Target(Source_Target SourceTargetObject) {
        this.SourceTargetObject = SourceTargetObject;
    }
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Source_Target {
    @JsonProperty("val")
    private float val;

    public float getVal() {
         return val;
    }

    public void setVal(float val) {
        this.val = val;
    }
}
那么您的源\目标类应该是:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ExchangeRate {
    @JsonProperty("USD_INR")
    Source_Target SourceTargetObject;

    public Source_Target getSource_Target() {
        return SourceTargetObject;
    }

    public void setSource_Target(Source_Target SourceTargetObject) {
        this.SourceTargetObject = SourceTargetObject;
    }
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Source_Target {
    @JsonProperty("val")
    private float val;

    public float getVal() {
         return val;
    }

    public void setVal(float val) {
        this.val = val;
    }
}

请注意您的类命名约定。我将
Source\u Target
重命名为
SourceTarget
,以遵循Java命名约定

您可以创建一个自定义映射:

public class ExchangeRate extends HashMap<String, ExchangeRateValue> implements Serializable {        
}

public class ExchangeRateValue implements Serializable {

    private float val;

    public float getVal() {
        return val;
    }

    public void setVal(float val) {
        this.val = val;
    }
}

您能否将确切的
NullPointerException
堆栈跟踪发布到您的问题?@JsonProperty(“USD_INR”)-不能这样给出,因为属性随源和目标货币的不同而变化。@JsonProperty(“USD_INR”)-不能这样给出,因为属性随源和目标货币的不同而变化。。
 ExchangeRate exchangeRate = restTemplate.getForObject("https://free.currencyconverterapi.com/api/v6/convert?q=Source_Target&compact=y", ExchangeRate.class);
 float data = exchangeRate.get("USD_INR").getVal();