gpt4 book ai didi

java - 如何接受动态 json 响应并向该对象添加一个键值并从 spring boot Controller 返回相同的 JSONObject

转载 作者:行者123 更新时间:2023-11-30 05:40:39 25 4
gpt4 key购买 nike

我的 Controller 正在接收作为 dto 对象的 post 请求,并且我的 dto 有一个对象数组,用于获取 json 对象数组,我必须向该数组中的每个 json 对象添加一个键值并将其返回。

dto 类:

public class FileProcessDTO {

private String module;
private Object[] data;

public String getModule() {
return module;
}
public void setModule(String module) {
this.module = module;
}
public Object[] getData() {
return data;
}
public void setData(Object[] data) {
this.data = data;
}
}

下面是 Controller 方法

@PostMapping("/processData")
public FileProcessDTO processFileData(@Valid @RequestBody FileProcessDTO fileProcess) throws JSONException {

String module = fileProcess.getModule();
Object[] objects= fileProcess.getData();

JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray(fileProcess.getData());

FileProcessDTO fileProcessDTO = new FileProcessDTO();
fileProcessDTO.setModule(module);


for (int i = 0; i < jsonArray.length(); i++) {
try {
jsonObject = jsonArray.getJSONObject(i);
jsonObject.put("status", true);
} catch (Exception e) {
jsonObject.put("status", false);
jsonObject.put("error", e.getMessage());
}


objects[i]=jsonObject;

}
fileProcessDTO.setData(objects);

return fileProcessDTO;
}

下面是客户端post请求中传递的数据

{
"module" : "assignment",
"data":[
{
"name": "chandan",
"age":"27"
},
{
"name": "Yo",
"age":"26"
},
{
"name": "Jo",
"age":"25"
}
]
}

以上对象中的“data”数组键和值在不同的请求中会有所不同(可能在下一个请求中“name”和“age”会改变) .

下面我收到错误。

org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.springframework.boot.configurationprocessor.json.JSONObject]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.boot.configurationprocessor.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.crisil.apg.service.dto.FileProcessDTO["data"]->org.springframework.boot.configurationprocessor.json.JSONObject[0])
2019-04-17 12:04:14.002 WARN 10808 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator : There was a problem with the instance info replicator

我还尝试更改 Controller 方法中的行,如下所示,但它不是 json 响应。

objects[i]=jsonObject.toString();

//below is response
{
"module": "assignment",
"data": [
"{\"name\":\"chandan\",\"age\":\"27\",\"status\":true}",
"{\"name\":\"Yo\",\"age\":\"26\",\"status\":true}",
"{\"name\":\"Jo\",\"age\":\"25\",\"status\":true}"
]
}

请建议可能的代码以使其工作。谢谢。

最佳答案

您可以使用String作为请求体,然后将字符串转换为JSONObject并进行处理。

@PostMapping(value="/get",consumes={"application/json"})
public ResponseEntity<?> test(@RequestBody String req){

//String to JSON Object
JSONObject obj= new JSONObject(req);
JSONArray arr=(JSONArray)obj.get("arr");

//Adding ID to JSON ARRAY
for(int i=0;i<arr.length();i++){
JSONObject ob=(JSONObject)arr.get(i);
ob.append("id", "id-"+i+1);
arr.put(i, ob);
}
return new ResponseEntity<>(arr.toString(),HttpStatus.OK);
}

关于java - 如何接受动态 json 响应并向该对象添加一个键值并从 spring boot Controller 返回相同的 JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55722004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com