2013-03-16 111 views
1

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

代码在那里我送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) 
{ 

} 

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

回答

2

我不知道有任何JAX-RS或类似的方式做到这一点。我会读的JSON未修改(文本),并直接使用杰克逊:

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

但是,这是一个有点更令人费解的海事组织。

1

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

例如。

class PapaPojo { 

    private BabyPojo1 babyPojo1; 

    private BabyPojo2 babyPojo2; 
} 

BabyPojo1BabyPojo2是原来的2层的POJO。