Java 如何在SpringREST请求中访问内部json对象
我想创建一个API,其格式如下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
{
"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
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
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
是什么。这是你自己的东西还是图书馆里的东西?