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)
您的实现存在一个问题,即您显式创建 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)
归档时间: |
|
查看次数: |
8922 次 |
最近记录: |