Il existe un contrôleur Spring Rest:
{ "empty": false }
J'ai fait un test avec Postman: http://172.20.40.4:8080/Oxalys_WS/secanalytique/sectionbyaxepro/8 ; et ce que j'ai toujours, c'est
@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; } }
Alors qu'est-ce qui ne va pas?
4 Réponses :
Au lieu de créer JSONObject manuellement, vous pouvez le gérer de cette manière
@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); }
Il convertira automatiquement la carte en json!
Il y a eu un problème avec votre implémentation: vous créez un objet json explicitement et que vous le renvoyez ce qui n'est pas obligatoire.
Au lieu de cela, vous devez simplement envoyer votre java POJO / class, spring le convertira en JSON et le renverra.
Spring utilise Jackson comme sérialiseur / désérialiseur par défaut. Ici, puisqu'un objet est déjà JSONObject, Jackson ne sait pas comment le sérialiser.
Il existe deux façons de résoudre ce problème
1. Définissez votre propre type de données et remplissez-le.
@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(); }
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
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); }
Merci beaucoup, j'étais également confronté à un problème similaire, j'ai essayé l'approche ci-dessus et cela fonctionne bien.
J'ai rencontré le même problème et j'ai trouvé le moyen de le gérer.
@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); }
org.json.simple fonctionne. Pour quelqu'un qui ne souhaite pas convertir le résultat en String.
pouvez-vous ajouter quelle bibliothèque pour JSONObject? est-ce org.json.simple.JSONObject?
il provient de org.json json 20180813 version>
org.json.JSONObject;
, la dépendance est:Je reçois une sortie sous la forme
{"cce0": "frityyy"}
, avec simple.JSONObjectDouble possible de l ' stackoverflow.com/ questions / 14941163 /… . Je pense que vous pouvez essayer cette réponse stackoverflow.com/a/14941402/6952155
Ohh, compris, lorsque vous ajoutez
MediaType.APPLICATION_JSON_VALUE
, il convertit l'objet en Json, mais puisque vous avez déjà json, qu'il tente de convertir à nouveau, si vous faitesResponseEntity.status (HttpStatus .OK) .body (jsonModel.toString ())
import org.springframework.http.ResponseEntity;
ou simplementrenvoyer jsonModel.toString ();
it travauxJe suggérerais de définir votre propre type de données et vous ne devriez pas vous soucier de la conversion json, cela sera pris en charge par Spring.