将JSON响应映射到多个POJO

时间:2013-03-16 11:43:37

标签: java json spring jackson

我正在以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() {

                }
            });
        });

Spring Controller

String addCustomProductToCart(@RequestBody CustomProduct customProduct)
{

}

我知道怎么做一个pojo。但是不知道如何将相同的JSON映射到两个Pojo。

2 个答案:

答案 0 :(得分: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);
}

但这是一个更复杂的IMO。

答案 1 :(得分:1)

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

例如。

class PapaPojo {

  private BabyPojo1 babyPojo1;

  private BabyPojo2 babyPojo2;
}

BabyPojo1BabyPojo2是原始的2个POJO。