JSONObject 总是返回 “empty”: false

2022-09-04 02:19:55

有一个弹簧休息控制器:

@RestController
@RequestMapping("secanalytique")
public class SectionAnalytiqueController {

    @GetMapping(value = "/sectionbyaxepro/{codecomp}", produces = "application/json")
    public JSONObject getByAxePro(@PathVariable String codecomp) {
        JSONObject jsonModel = new JSONObject();
        jsonModel.put("cce0","frityyy");
        return jsonModel;
    }

}

我和邮递员做了一个测试:http://172.20.40.4:8080/Oxalys_WS/secanalytique/sectionbyaxepro/8;而我得到的总是

{
    "empty": false
}

那么问题出在哪里呢?


答案 1

我遇到了同样的问题,并找到了处理的方法。

@GetMapping(value = "/test/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> getById(@PathVariable String id) {
    JSONObject jsObj = new JSONObject();
    jsObj.put("t0","test0");
    JSONArray jsArr = new JSONArray();
    jsArr.put(jsObj.toMap());

    return new ResponseEntity<>(jsObj.toMap(), HttpStatus.OK);
    //return new ResponseEntity<>(jsArr.toList(), HttpStatus.OK);
}

答案 2

您的实现存在一个问题,即您显式创建 JSON 对象并返回它,这不是必需的。
相反,你应该只发送你的java POJO /类,spring会将其转换为JSON并返回它。
Spring 用作默认的序列化程序/反序列化程序。
在这里,由于一个对象已经是,杰克逊不知道如何序列化它。JacksonJSONObject

有两种方法可以解决此问题:

解决方案1。
定义您自己的数据类型并填充它。

import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;

@GetMapping(value = "/sectionbyaxepro/{codecomp}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<String, String>> getByAxePro(@PathVariable String codecomp) {
    Map<String, String> map = new HashMap<>();
    map.put("cce0","frityyy");
    return ResponseEntity.status(HttpStatus.OK).body(map);
}

解决方案2。

将现有代码修改为以下任一方式。

1

import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;

@GetMapping(value = "/sectionbyaxepro/{codecomp}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getByAxePro(@PathVariable String codecomp) {
    JSONObject jsonModel = new JSONObject();
    jsonModel.put("cce0","frityyy");
    return ResponseEntity.status(HttpStatus.OK).body(jsonModel.toString());
}

2

@GetMapping(value = "/sectionbyaxepro/{codecomp}", produces = MediaType.APPLICATION_JSON_VALUE)
public String getByAxePro(@PathVariable String codecomp) {
   JSONObject jsonModel = new JSONObject();
   jsonModel.put("cce0","frityyy");
   return jsonModel.toString();
}