【发布时间】:2015-04-22 23:02:10
【问题描述】:
我有以下 JSON,我想从 REST 解析成 JAVA。我有一个 AR 对象和一个方法,并以 wine 为参数。我该怎么做?
{
"type": "AR",
"selection_month": "Feb/2015",
"wines": [
{
"variety": "RED",
"wine_type": "TABLE",
"label_name": "The Mission",
"grape": "Merlot",
"region": "Napa",
"country": "USA",
"maker": "Sterling",
"year": "2014"
},
{
"variety": "RED",
"wine_type": "TABLE",
"label_name": "Joseph Phelps Cabernet Sauvignon 2012",
"grape": "Cabernet Sauvignon",
"region": "Napa",
"country": "USA",
"maker": "Joseph Phelps",
"year": "2012"
},
{
"variety": "RED",
"wine_type": "TABLE",
"label_name": "Round Pond Estate Rutherford",
"grape": "Cabernet Sauvignon",
"region": "Napa",
"country": "USA",
"maker": "Rutherford",
"year": "2014"
},
{
"variety": "RED",
"wine_type": "TABLE",
"label_name": "Dona Paula Black Label",
"grape": "Bordeaux",
"region": "",
"country": "Argentina",
"maker": "Dona Paula",
"year": "2013"
},
{
"variety": "RED",
"wine_type": "TABLE",
"label_name": "Schug Sonoma Coast Pinot Noir",
"grape": "Pinot Noir",
"region": "Sonoma Valley",
"country": "USA",
"maker": "Walter Schug",
"year": "2013"
},
{
"variety": "RED",
"wine_type": "TABLE",
"label_name": "Caymus Special Selection Cabernet Sauvignon",
"grape": "Cabernet Sauvignon",
"region": "Napa Valley",
"country": "USA",
"maker": "Charles F. Wagner",
"year": "2014"
}
]
}
我有以下方法进行
@POST
public Response addAR(InputStream incomingData){
String parsedJson = jsonStreamToString(incomingData);
try {
JSONObject json = new JSONObject(parsedJson);
String name = json.getString("name");
int uid = useCase.createAR(name);
JSONObject jsonResponse = new JSONObject(new JSONStringer().object()
.key("id").value(uid).endObject().toString());
return Response.status(201).entity(jsonResponse.toString()).build();
} catch (JSONException e) {
e.printStackTrace();
return Response.status(404).entity(e.toString()).build();
}
}
【问题讨论】:
-
在方法参数中只接受一个字符串而不是
InputStream。这是您面临的问题,实施jsonStreamToString?如果不是,请更详细地解释您所面临的问题到底是什么 -
我很难将葡萄酒数组和前两个对象(类型和选择月份)分开。用什么样的数据结构来保存葡萄酒数组。JSONArray 似乎没有有很大帮助
-
我建议不要尝试自己解析所有内容,而是使用 POJO。让 Jackson 将 JSON 解析为您的 POJO。
Wine可以是一个类,AR可以是一个带有List<Wine>的类。您使用的是什么 JAX-RS 实现(和版本)(Jersey、Resteasy、CXF)?也许我可以帮助您开始使用 Jackson -
我正在使用 Jersey JAX_RS 2.0