JSONObject 总是返回“空”:false

phe*_*mix 8 java rest spring json

有一个弹簧休息控制器:

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

}
Run Code Online (Sandbox Code Playgroud)

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

{
    "empty": false
}
Run Code Online (Sandbox Code Playgroud)

那么有什么问题呢?

小智 8

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

@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);
}
Run Code Online (Sandbox Code Playgroud)


dkb*_*dkb 5

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

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

解决方案 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);
}
Run Code Online (Sandbox Code Playgroud)

或者

解决方案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());
}
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)


小智 0

您可以通过这种方式处理它,而不是手动创建 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);
    }
Run Code Online (Sandbox Code Playgroud)