当前位置: 代码迷 >> java >> JSONObject 总是返回“空”:false
  详细解决方案

JSONObject 总是返回“空”:false

热度:122   发布时间:2023-07-31 13:43:04.0

有一个弹簧休息控制器:

@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;
    }

}

我用 Postman 做了一个测试: ://172.20.40.4: /Oxalys_WS/secanalytique/ ; 我得到的总是

{
    "empty": false
}

那么有什么问题呢?

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

@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);
}

您的实现存在一个问题,即您显式创建 JSON 对象并返回它不是必需的。
相反,您应该只发送您的 java POJO/class,spring 会将其转换为 JSON 并返回。
Spring 使用 Jackson 作为默认的序列化器/反序列化器。
这里因为一个对象已经是 JSONObject,Jackson 不知道如何序列化它。
有两种方法可以解决这个问题

  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(); }

您可以通过这种方式处理它,而不是手动创建 JSONObject

@GetMapping(value = "/sectionbyaxepro/{codecomp}")
    public ResponseEntity<?> getByAxePro(@PathVariable("codecomp") String codecomp){
        Map map = new HashMap<>();
        map.put("key", "value");
        return new ResponseEntity<>(map, HttpStatus.OK);
    }

org.json.simple 工作。 对于不想将结果转换为字符串的人。

  相关解决方案