【问题标题】:Spring RequestBody needs to load nested ObjectSpring RequestBody 需要加载嵌套的 Object
【发布时间】:2016-02-22 00:59:02
【问题描述】:

我试图让一个对象参数加载到我的一个类中,但无法让它工作。外部对象 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 不是一种选择。我已经问过了。

【问题讨论】:

  • 在DeviceInfo中,你是否省略了transactino对象?
  • @reos - 是的,它除了持有 MobileDeviceData 对象外什么都不做。所以想省略它。

标签: java json spring spring-mvc


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多