Spring RequestBody需要加载嵌套的Object



我正试图在我的一个类中加载一个Object参数,但无法使其工作。外部对象DeviceInfo按预期加载,但MobileDeviceData没有加载,因为它位于Transaction对象内部。

@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对象,而不必创建一个除了MobileDeviceData类之外什么都不包含的Transaction对象?我希望有一些方法可以修改@JsonProperty,通知它对象在Transaction对象内部。

此外,修改JSON不是一个选项。我已经问过了。

请检查此SO线程并查看两个答案。我建议第二个。它将适合您的需求,但它是一个过于自定义的解决方案-创建您自己的注释和实现。尽管如此,代码看起来非常干净,没有伪包装器对象。我认为这是一个非常好和优雅的解决方案。

最新更新