0

我以 JSON 的形式向 spring 控制器发送响应,我想将它映射到两个不同的 POJO。因为它包含两个 pojo 的组合数据。我该怎么做。

我发送 JSON 的代码

$("#configure-buy-online").click(
        function(e) {
            var customProduct = '{"name":"Custom'
                + '","vcpu" : "'
                + $('#core')
                        .val()
                + '","ram" : "'
                + $('#ram')
                        .val()
                + '","hddSata":"'
                + $('#hddsata')
                        .val()
                + '"}';
            console.log("Product :"+ customProduct);
            $
            .ajax({
                type : 'POST',
                url : '../addToCartCustomize.do',
                dataType : 'json',
                contentType : 'application/json',
                data : customProduct,
                success : function(data) {
                    alert("Success");
                },
                error : function() {

                }
            });
        });

弹簧控制器

String addCustomProductToCart(@RequestBody CustomProduct customProduct)
{

}

我知道如何为 One pojo 做这件事。但不知道如何将相同的 JSON 映射到两个 Pojo。

4

2 回答 2

2

我不知道有任何 JAX-RS 或类似的方式来做这件事。我会阅读未修​​改的 JSON(作为文本)并直接使用 Jackson:

void doSomething(@RequestBody String pureJson) {
  ObjectMapper mapper = new ObjectMapper();  
  PojoA pojoA = mapper.readValue(pureJson, PojoA.class);
  PojoB pojoB = mapper.readValue(pureJson, PojoB.class);
}

或者,您可以将 PojoA 转换为 JSON,然后转换为 PojoB,如下所示:

void doSomething(@RequestBody PojoA pojoA) {
  ObjectMapper mapper = new ObjectMapper();  
  String pureJson = mapper.writeValueAsString(pojoA);
  PojoB pojoB = mapper.readValue(pureJson, PojoB.class);
}

但这有点令人费解。

于 2013-03-16T11:51:36.170 回答
1

您可以将 2 个 POJO 包装在另一个 POJO 中。

例如。

class PapaPojo {

  private BabyPojo1 babyPojo1;

  private BabyPojo2 babyPojo2;
}

您原来的 2 个 POJO在哪里BabyPojo1以及在哪里。BabyPojo2

于 2013-03-16T12:02:57.943 回答