JSONObject всегда возвращает «пусто»: false - PullRequest
0 голосов
/ 14 февраля 2019

Есть контроллер упора пружины:

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

}

Я сделал тест с почтальоном: http://172.20.40.4:8080/Oxalys_WS/secanalytique/sectionbyaxepro/8;и то, что я получил, это всегда

{
    "empty": false
}

Так что же не так?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

В вашей реализации была одна проблема: вы явно создаете объект json и возвращаете его, что не требуется.
Вместо этого вам просто нужно отправить свой Java-POJO / класс, а Spring преобразует его в JSON и вернет.
Spring использует Джексона в качестве сериализатора / десериализатора по умолчанию.Здесь, поскольку объект уже является 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);
}
Измените существующий код одним из следующих способов.

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();
}
0 голосов
/ 14 февраля 2019

Вместо того, чтобы создавать 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...