在Spring MVC Rest中处理JSon时如何处理POJO嵌套对象

我试图弄清楚如何更好地处理Spring MVC中嵌套Java对象的JSon序列化/反序列化。

我的域模型如下:

  public class Cart {

private String id;

private Customer customerID;

private Checkout checkoutID;

private List<CartProduct> itemCatalogList;

*** ... getters & setters ... ***

}

public class ProductCart {

private String sku;

private String color;

private String sizeBase

private int qty;

*** ... getters & setters ... ***

}

public class Checkout {

private String id;

private String billingAddress;

private String shippingAddress;

private Cart cartID;

*** ... getters & setters ... ***

}

我在想的JSon是这样的:

{

"cart": {

"$oid": "51f631cb84812abb04000006"

},

"shippingAddress" : "5h avenue - new york",

"billingAddress" : "5h avenue - new york"

}

{

"customer": {

"$oid": "5174da574940368a9126e8dc"

},

"items_catalog": [

{

"sku": "00075161",

"color": "ff99cc",

"size_base": "IT_25",

"qty": 3,

},

{

"sku": "00075161",

"color": "ff99cc",

"size_base": "IT_27",

"qty": 2,

},

{

"sku": "00075161",

"color": "ff99cc",

"size_base": "IT_29",

"qty": 1,

}

}

假设这是一个可行的域模型和json文档,如何在Spring中从JSon开始创建结帐?

我的问题是我不知道如何在结帐和购物车json中“爆炸” $ oid来创建结帐和购物车Java Bean:

  • 有没有办法用杰克逊自动做到这一点?

  • 还是应该创建一种拦截器来处理例如checkout json以便检索购物车,然后执行到POJO的映射?

(-还是第三种方法?)

非常感谢您的任何建议。

回答:

如果我对您的理解正确,则可以执行以下操作(我使用的是Spring 3.2.3.RELEASE&Jackson 1.9.12)。

在applicationContext.xml中,您具有:

<bean id="jacksonMessageConverter"

class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<property name="messageConverters">

<list>

<ref bean="jacksonMessageConverter"/>

</list>

</property>

</bean>

您具有如下所示的Spring控制器:

package test;

import org.apache.log4j.Logger;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

@Controller

@RequestMapping("/json")

public class JsonParsingController {

private final static Logger log = Logger.getLogger(JsonParsingController.class);

@RequestMapping(value = "/cart.do", method = RequestMethod.POST, produces = "application/json; charset=utf-8")

@ResponseBody public CartResponse handleCart(@RequestBody Cart cart) {

if (cart != null) {

log.debug(cart);

}

return new CartResponse("OK!");

}

}

和三个POJO:

package test;

public class Cart {

private String id;

private Checkout checkoutID;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public Checkout getCheckoutID() {

return checkoutID;

}

public void setCheckoutID(Checkout checkoutID) {

this.checkoutID = checkoutID;

}

@Override

public String toString() {

return "Cart{" +

"id='" + id + '\'' +

", checkoutID=" + checkoutID +

'}';

}

}

package test;

public class Checkout {

private String id;

private String billingAddress;

private String shippingAddress;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getBillingAddress() {

return billingAddress;

}

public void setBillingAddress(String billingAddress) {

this.billingAddress = billingAddress;

}

public String getShippingAddress() {

return shippingAddress;

}

public void setShippingAddress(String shippingAddress) {

this.shippingAddress = shippingAddress;

}

@Override

public String toString() {

return "Checkout{" +

"id='" + id + '\'' +

", billingAddress='" + billingAddress + '\'' +

", shippingAddress='" + shippingAddress + '\'' +

'}';

}

}

package test;

public class CartResponse {

private String result;

public CartResponse(String result) {

this.result = result;

}

public String getResult() {

return result;

}

public void setResult(String result) {

this.result = result;

}

}

然后,您可以在HTML页面中执行以下操作:

<script language="JavaScript" type="text/javascript">

$(document).ready(function () {

// Your data

var arr = {

id: '51f631cb84812abb04000006',

checkoutID: {

id: '123456789',

"shippingAddress" : "5h avenue - new york",

"billingAddress" : "5h avenue - new york"

}

};

$.ajax({

url: '/json/cart.do',

type: 'POST',

data: JSON.stringify(arr),

contentType: 'application/json; charset=utf-8',

dataType: 'json',

async: false,

success: function (msg) {

alert(msg.result);

}

});

});

</script>

至少对我来说-它有效:)

以上是 在Spring MVC Rest中处理JSon时如何处理POJO嵌套对象 的全部内容, 来源链接: utcz.com/qa/414860.html

回到顶部