Java 如何在SpringREST请求中访问内部json对象

Java 如何在SpringREST请求中访问内部json对象,java,spring,rest,spring-mvc,Java,Spring,Rest,Spring Mvc,我想创建一个API,其格式如下 { "jsonObject": { //some json object }, "key": "SampleKey", "jsonDataKey": "SampleDataKey" } 为此,我创建了RequestBody类,如下所示 public class ParentJsonInfo { public String g

我想创建一个API,其格式如下

{
           "jsonObject": {
                     //some json object     
           },
           "key": "SampleKey",
           "jsonDataKey": "SampleDataKey"
}
为此,我创建了RequestBody类,如下所示

public class ParentJsonInfo {
public String getKey() {
    return key;
}

public void setKey(String key) {
    this.key = key;
}

private String key;

public JsonObject getJsonData() {
    return jsonData;
}

public void setJsonData(JsonObject jsonData) {
    this.jsonData = jsonData;
}

private JsonObject jsonData;

public String getJsonDataKey() {
    return jsonDataKey;
}

public void setJsonDataKey(String jsonDataKey) {
    this.jsonDataKey = jsonDataKey;
}

private String jsonDataKey;
}

但不幸的是,我在类的json对象中没有得到任何数据。我做错了什么。请指导我如何访问该对象中的数据

这是控制器方法代码

@RequestMapping(value = "/postNews", method = RequestMethod.POST)
public Greeting greeting(@RequestBody ParentJsonInfo parentJsonInfo) {
 Jsonobject jsonObject= parentJsonInfo.getjsonObject();
}

您遇到的问题是,您正试图反序列化来自json的
jsonObject
,但您的字段名为
jsonData
。 正如@Mushtu提到的,您需要重命名该字段

这是您的ParentJsonInfo,其中有一些调整:

  • 将字段移到顶部(将字段和方法分别分组是一种很好的做法)
  • 将字段从
    jsonData
    重命名为
    jsonObject
ParentJsonInfo:

public class ParentJsonInfo {

    private String key;
    private JsonObject jsonObject;
    private String jsonDataKey;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public JsonObject getJsonObject() {
        return jsonObject;
    }

    public void setJsonObject(JsonObject jsonObject) {
        this.jsonObject = jsonObject;
    }

    public String getJsonDataKey() {
        return jsonDataKey;
    }

    public void setJsonDataKey(String jsonDataKey) {
        this.jsonDataKey = jsonDataKey;
    }
}
JsonObject:

public class JsonObject {

    private Map<String, Object> other = new HashMap<>();

    @JsonAnyGetter
    public Map<String, Object> getProperties() {
        return other;
    }

    @JsonAnySetter
    public void set(String name, String value) {
        other.put(name, value);
    }
}
公共类JsonObject{
private-Map-other=new-HashMap();
@JsonAnyGetter
公共映射getProperties(){
归还他人;
}
@JSONANYSETER
公共无效集(字符串名称、字符串值){
其他。put(名称、值);
}
}

您遇到的问题是,您正试图反序列化json中的
jsonObject
,但您的字段名为
jsonData
。 正如@Mushtu提到的,您需要重命名该字段

这是您的ParentJsonInfo,其中有一些调整:

  • 将字段移到顶部(将字段和方法分别分组是一种很好的做法)
  • 将字段从
    jsonData
    重命名为
    jsonObject
ParentJsonInfo:

public class ParentJsonInfo {

    private String key;
    private JsonObject jsonObject;
    private String jsonDataKey;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public JsonObject getJsonObject() {
        return jsonObject;
    }

    public void setJsonObject(JsonObject jsonObject) {
        this.jsonObject = jsonObject;
    }

    public String getJsonDataKey() {
        return jsonDataKey;
    }

    public void setJsonDataKey(String jsonDataKey) {
        this.jsonDataKey = jsonDataKey;
    }
}
JsonObject:

public class JsonObject {

    private Map<String, Object> other = new HashMap<>();

    @JsonAnyGetter
    public Map<String, Object> getProperties() {
        return other;
    }

    @JsonAnySetter
    public void set(String name, String value) {
        other.put(name, value);
    }
}
公共类JsonObject{
private-Map-other=new-HashMap();
@JsonAnyGetter
公共映射getProperties(){
归还他人;
}
@JSONANYSETER
公共无效集(字符串名称、字符串值){
其他。put(名称、值);
}
}

u可以这样修改

public Greeting greeting(@RequestBody String parentJsonInfo) {
 // parse string to jsonobject
} 

你可以这样修改

public Greeting greeting(@RequestBody String parentJsonInfo) {
 // parse string to jsonobject
} 

显示更多代码。特别是控制器,因此我们可以帮助您解决问题。添加了控制器方法以及json字符串中使用的键是jsonObject,但您在模型中将其声明为jsonData。将其重命名为jsonObject.show more code。特别是控制器,因此我们可以帮助您解决问题。添加了控制器方法以及json字符串中使用的键是jsonObject,但您在模型中将其声明为jsonData。将其重命名为jsonObject。进行了此更改,但仍然无法工作。。json对象将作为empty@AndroidDev
“jsonObject”:{//some json object},
。我们需要更多信息:)JSON和POJO来帮助你一些JSON对象意味着你可以在这里考虑任何JSON对象。properties@AndroidDev我已经用一个可能的解决方案更新了我的答案,以从json获取数据。不过,我不完全确定
JsonObject
是什么。它是您自己的对象还是库中的某个对象?是否发生了更改,但仍然不起作用。。json对象将作为empty@AndroidDev
“jsonObject”:{//some json object},
。我们需要更多信息:)JSON和POJO来帮助你一些JSON对象意味着你可以在这里考虑任何JSON对象。properties@AndroidDev我已经用一个可能的解决方案更新了我的答案,以从json获取数据。不过,我不完全确定
JsonObject
是什么。这是你自己的东西还是图书馆里的东西?