如何通过Java DTO将嵌入式JSON对象表示为字符串

时间:2018-05-19 07:17:43

标签: java json spring-boot dto

我有以下示例对象:

{
  "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
}

但是,我收到了一个错误。我不知道如何表示&#34;元数据&#34; (理论上可以包含任何客户端特定的JSON对象),而没有单独的对象。

2 个答案:

答案 0 :(得分:0)

您可以使用org.json.JSONObject来表示元数据,而不是使用字符串。 然后在JSONObject上使用toString()来获取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);
    }
}

答案 1 :(得分:0)

因此我的问题的解决方案来自一个提示形式&#34; Hitobat&#34;谁建议使用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;

}