Как представить встроенный объект JSON в виде строки через Java DTO - PullRequest
0 голосов
/ 19 мая 2018

У меня есть следующий пример объекта:

{
  "manufacturer": "bla",
  "model": "5901",
  "metadata": { 
    "CommercialName" : "bla bla",
    "Intername Name" : "bla bla"
   },
  "features": [
    "a"
  ],
  "profiles": 1
}

Я хочу сохранить приведенную ниже часть метаданных без синтаксического анализа непосредственно в типе Postgres SQL "jsob".

  "metadata": { 
    "CommercialName" : "bla bla",
    "Intername Name" : "bla bla"
   },

DTOКласс выглядит как ниже.

JsonInclude(JsonInclude.Include.NON_NULL)
public class device {

    private Long            id;
    private String          manufacturer;
    private String          model;
    private Integer         profiles;
    private String          metadata;
    private List<String>    feature;

+all the gettors/settors
}

Однако я получаю сообщение об ошибке.Я не знаю, как представлять «метаданные» (которые теоретически могут содержать любой клиентский объект JSON) без отдельного объекта для него.

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Таким образом, решение моей проблемы было из подсказки «Hitobat», которая предложила использовать Map<String,String>, я немного изменил ее на Map<?,?>, теперь я вижу, что получаю данные, даже когда передаю немного более сложный jSONобъект.

СПАСИБО !!

{
  "manufacturer": "dada",
  "model": "kaka",
  "metadata": { 
    "CommercialName" : "a3 sf",
    "Internalname Name" : "asdf",
    "timbacktu" : {
        "bumdarabu" : 345,
        "aadfsq" : 2.3
    }
   },
  "features": [
    "asdfsd"
  ],
  "profiles": 1
}

Класс DTO

@JsonInclude(JsonInclude.Include.NON_NULL)
public class device {

    private Long            id;
    private String          manufacturer;
    private String          model;
    private Integer         profiles;
    private Map<?,?>        metadata;
    private List<String>    features;

}
0 голосов
/ 19 мая 2018

Вы можете использовать org.json.JSONObject для представления метаданных вместо использования строки.Затем используйте toString () для JSONObject, чтобы получить текст JSON.

https://stleary.github.io/JSON-java/org/json/JSONObject.html

Я добавляю фрагмент кода контроллера.

@RestController
public class DeviceController {
    @RequestMapping(value="/add/device", method=RequestMethod.POST, produces={MediaType.APPLICATION_JSON_VALUE})
    public ResponseEntity<String> postDeviceData(@RequestBody Device device) {
        // The device object will be filled with data sent from Http request
        return new ResponseEntity<>("Done", HttpStatus.OK);
    }
}
...