2015-11-19 29 views
1

我想獲得一個對象參數加載在我的一個類,但無法讓它工作。外部對象DeviceInfo按預期加載,但MobileDeviceData不是由於它位於Transaction對象內部。春季RequestBody需要加載嵌套的對象

@RequestMapping(value="/mobile/device", method = RequestMethod.PUT) 
public ResponseEntity<Object> flagDevice (@RequestBody List<DeviceInfo> deviceInfoList, @RequestHeader(value=IN_AUTH_CUSTOMER_GUID) String inAuthIdentity) { 
    ... code here ... 

}

爲了清楚起見,這裏是我的簡化@Entity類:

@Entity 
public class DeviceInfo implements Serializable { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private long id; 

    private MobileDeviceReasonCode reasonCode; 

    @JsonProperty("mobile-data") 
    private MobileDeviceData mobileDeviceData; 

    public void setMobileDeviceData(MobileDeviceData mobileDeviceData) { 
     this.mobileDeviceData = mobileDeviceData; 
    } 
} 

而且我MobileDeviceData類看起來是這樣的:

@Entity 
public class MobileDeviceData implements Serializable { 

    @Id 
    private long deviceInfoId; 

    @JsonProperty("resilient_id") 
    private String resilientId; 

    public long getResilientId() { 
     return resilientId; 
    } 

    public void setResilientId(long resilientId) { 
     this.resilientId = resilientId; 
    } 
} 

的JSON在未來:

[ 
    { 
     "reasonCode": "CHARGEBACK", 
     "activityDate": 1447952509, 
     "inPermId": "CUSTOMER InPermId", 
     "transaction": { 
      "mobile-data": { 
       "resilient_id": 123 
      } 
     } 
    } 
] 

是否有某種方式可以加載MobileDeviceData對象,而無需創建Transaction對象,該對象除MobileDeviceData類之外不包含任何內容?我希望有一些方法可以修改@JsonProperty以通知它該對象位於Transaction對象內。

此外,修改JSON不是一個選項。我已經問過了。

+0

在DeviceInfo中,你是否忽略了transactino對象? – reos

+0

@reos - 是的,除了保存MobileDeviceData對象之外,它什麼也不做。所以想省略它。 – DavidR

回答

1

請檢查this SO線程並查看兩個答案。我建議第二個。它將滿足您的需求,但它是一個太自定義的解決方案 - 儘管如此創建您自己的註釋和實現,代碼將看起來很乾淨,沒有虛擬包裝對象。我認爲這是一個非常好的優雅解決方案。