2015-10-29 27 views
0

叫我創建這個規範服務:春天JPA - 如何JSON格式應該以及如何與RestTemplate

@RequestMapping(value = "initCustomer", method = RequestMethod.POST) 
    public ResponseEntity<Long> create(@RequestBody CustomerForm customerForm) { 

元素CustomerForm具有這種結構(我忽略每一個的getter/setter方法 ):

@XmlRootElement(name = "customer") 
    public static class CustomerForm { 
     private String name; 
     private String hostname; 
     private List<ProbeMonitor> monitors; 
@XmlElement(name = "monitor") 
     public List<ProbeMonitor> getMonitors() { 
      return monitors; 
     } 
} 

ProbeMonitor@Entity@EmbeddedId(因爲此CLASSE具有在主鍵多個字段)。

public class ProbeMonitor implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private ProbeMonitorId id; 
    private Integer active; 
    private Date inserted; 
    private Date updated; 

    @EmbeddedId 
    public ProbeMonitorId getId() { 
     return id; 
    } 
} 

最後,ProbeMonitorId

@Embeddable 
public class ProbeMonitorId implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private String customer; 
    private String name; 
    private String type; 
} 

現在我應該對這個服務的請求(使用RestTemplate),但首先,我試圖用一個簡單的REST客戶端,其中i發送JSON(檢查所有作品)。

我送JSON在這種格式,但我得到「無法識別領域的‘ID’

{ 
    "name": "test_name", 
    "hostname": "test_hosT", 
    "monitors": [ 
     {  "id": {"customer": "custom"}, 
      "active": "1" 
     } 
    ] 
} 

我試圖消除JSON請求和WebService的「ID」字段將正確調用。

「監視器」應該如何格式化?

And ...(這是第二個問題)我應該如何創建RestTemplate來調用它?

+0

要忽略id字段,你應該@JsonIgnoreProperties註釋您的實體(ignoreUnknown =真) –

+0

我還沒有忽略這個屬性,我應該送監視器的列表,每個這種具有「客戶名稱和類型」性財產 – Mistre83

回答

0

我認爲已經找到了問題:

1 - private ProbeMonitorId id;在JSON範圍未聲明:

@EmbeddedId 
    **@XmlElement** 
    @**JsonProperty** 
    public ProbeMonitorId getId() { 
     return id; 
    } 

2 - 插入和更新,並沒有宣佈被忽略

@Basic 
    @Column(name = "Dt_Insert") 
    @JsonIgnore 
    public Date getInserted() { 
     return inserted; 
    } 

3 - 正確的JSON發送:

{ 
    "name": "test_name", 
    "hostname": "test_hosT", 
    "monitors": [{ 
      "id": {"customer": "cst", "name": "aname", "type": "atype"}, 
         "active": "1" 
     } 
    ]