2015-08-21 38 views
1

我具有接收像如下所示的JSON RequestBody控制器:堅持JSON文檔作爲字符串

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

我的問題是,我想存儲值(這是一個JSON文檔)作爲字段在Lob字段中,我不知道該怎麼做。

+0

您是否嘗試過編輯您的'Entity'類以存儲'specs'對象,然後保留?新的Specs對象可以有寬度和高度參數。 – Gyan

+0

我忘了指定我的規格值是動態的,所以我會有寬度和高度或不和其他一些領域。 –

+0

spec中是否有可能的值範圍?你可以用所有可能的字段製作一個對象'spec'嗎? –

回答

2

申報規格爲public Map<String,Integer> specs; 和對象轉換爲JSON使用傑克遜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