【问题标题】:Persist JSON document as a String将 JSON 文档保存为字符串
【发布时间】:2015-11-15 02:25:05
【问题描述】:

我有一个接收 JSON RequestBody 的控制器,如下所示:

{  
   "status":"pending",
   "status1":"pending",
   "status2":"pending",
   "status3":"pending",
   "specs":{  
      "width":1000,
      "height":1507,
      ........some other fields, any number of fields..
   },
}

我有一个Entity

@Entity
public class MyBean implements Serializable {

    @Id
    @GeneratedValue
    Long id;

    public String status;
    public String status1;
    public String status2;
    public String status3;
}

和我的控制器类:

@RequestMapping(value = "/insert", method = RequestMethod.POST)
public void insert(@RequestBody MyBean myBean) {
    return myService.save(myBean);
}

我的问题是我想将specs(这是一个 JSON 文档)的值作为字符串存储在 Lob 字段中,但我不知道该怎么做。

【问题讨论】:

  • 您是否尝试过编辑您的Entity 类以存储specs 对象,然后持久化?新的 Specs 对象可以有宽度和高度参数。
  • 我忘记指定我的规格值是动态的,所以我是否有宽度和高度以及其他一些字段。
  • 规范中是否存在可能值的范围?你能用所有可能的字段创建一个对象“规范”吗?
  • 不,我不能,因为我不知道所有可能的字段

标签: java json jpa spring-boot


【解决方案1】:

将规格声明为public Map<String,Integer> specs; 并将 Object 转换为 json 使用 Jackson fasterxml api,如下所示

MyBean bean=new MyBean();
    bean.setId(new Long(1));
    bean.setStatus("pending");
    bean.setStatus1("pending");
    bean.setStatus2("pending");
    bean.setStatus3("pending");

    Map<String, Integer> temp=new HashMap<String, Integer>();
    temp.put("width",1000);
    temp.put("height",1507);
    bean.setSpecs(temp);

    //Object to json
    StringWriter sw=new StringWriter();
    ObjectMapper mapper=new ObjectMapper();
    mapper.writeValue(sw,bean);
    System.out.println(sw.toString());


     //json to object
    MyBean newBean=mapper.readValue(sw.toString(), MyBean.class);
    System.out.println(newBean.toString());

如果您只想在保存之前序列化规范,请使用相同的 mapper.writeValue() 函数将规范转换为 json 字符串 更多信息请参考this

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2023-03-10
    • 2018-07-04
    • 2018-06-22
    相关资源
    最近更新 更多