问题描述
有一个弹簧休息控制器:
@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
}
那么有什么问题呢?
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/class,spring 会将其转换为 JSON 并返回。
Spring 使用 Jackson 作为默认的序列化器/反序列化器。
这里因为一个对象已经是 JSONObject,Jackson 不知道如何序列化它。
有两种方法可以解决这个问题
定义您自己的数据类型并填充它。
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); }
将现有代码修改为以下任一方式。
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(); }
3楼
您可以通过这种方式处理它,而不是手动创建 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);
}
4楼
org.json.simple 工作。 对于不想将结果转换为字符串的人。