Spring RequestBody需要加载嵌套的Object

时间:2015-11-19 18:17:15

标签: java json spring spring-mvc

我正在尝试将一个Object param加载到我的一个类中但无法使其工作。外部对象sonar.web.javaAdditionalOpts=-agentlib:jdwp=transport=dt_socket,suspend=y,server=y,address=9001 按预期加载,但DeviceInfo不会因为它位于MobileDeviceData对象内而加载。

Transaction

}

为清楚起见,这是我简化的@Entity类:

@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 ...

我的MobileDeviceData类看起来像这样:

@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;
    }
}

JSON进来了:

@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;
    }
}

有没有我可以加载[ { "reasonCode": "CHARGEBACK", "activityDate": 1447952509, "inPermId": "CUSTOMER InPermId", "transaction": { "mobile-data": { "resilient_id": 123 } } } ] 对象而不必创建一个MobileDeviceData对象,除了Transaction类之外什么都没有?我希望有一些方法可以修改MobileDeviceData以通知它该对象在@JsonProperty对象内。

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

1 个答案:

答案 0 :(得分:1)

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