Я использую Spring MVC и Джексона для моего приложения extjs и застрял на чем-то похожем.У меня есть список записей, возвращаемых из БД с использованием Hibernate. Класс DAO:
@SuppressWarnings("unchecked")
@Override
public List<CandidateStatus> getcandidateStatus() {
//return hibernateTemplate.find("select candstat.candidate.firstName as firstName,candstat.candidate.lastName as lastName,candstat.candidate.email as email,candstat.statusTitle as statusTitle,candstat.requirement.client.clientName as clientName,candstat.requirement.reqTitle as reqTitle from CandidateStatus as candstat");
return hibernateTemplate.find("from CandidateStatus");
//return hibernateTemplate.find("from CandidateStatus candstat left outer join candstat.candidate left outer join candstat.requirement left outer join candstat.requirement.client");
//return hibernateTemplate.find("from Candidates as cands inner join cands.candidateStats");
}
**Service class**
public List<CandidateStatus> getCandidateStatusList()
{
//return candidatesDAO.getCandidates();
return candidatesDAO.getcandidateStatus();
}
Класс контроллера
@RequestMapping(value="/candidates/view.action")
public @ResponseBody Map<String,? extends Object> view() throws Exception {
try{
//List<Candidates> candidates = candidatesService.getCandidatesList();
List<CandidateStatus> candidatestatus = candidatesService.getCandidateStatusList();
return getMap(candidatestatus);
} catch (Exception e) {
return getModelMapError("Error retrieving Candidates from database.");
}
private Map<String,Object> getMap(List<CandidateStatus> candidatestatus){
Map<String,Object> modelMap = new HashMap<String,Object>(3);
modelMap.put("success", true);
modelMap.put("total", candidatestatus.size());
modelMap.put("data", candidatestatus);
return modelMap;
}
private Map<String,Object> getModelMapError(String msg){
Map<String,Object> modelMap = new HashMap<String,Object>(2);
modelMap.put("message", msg);
modelMap.put("success", false);
return modelMap;
}
Перед добавлением его на карту я хочу отформатировать JSON в требуемомформат в соответствии с моим приложением. Я получаю формат вложенным способом, который не принимается extjs .
{
"data": [
{
"id": 29,
"requirement": {
"id": 27,
"client": {
"id": 12,
"clientName": "HireCraft"
},
"clientId": 12,
"reqTitle": "Support Engineer"
},
"reqid": 27,
"resid": 45,
"candidate": {
"id": 45,
"firstName": "Vikram",
"lastName": "",
"email": "bj.vikram@gmail.com"
},
"statusTitle": "Shortlisted"
}],
"success":true,
"total":7668
}
Я хочу, чтобы json был плоскимфайл, как это без вложенности.
"data": [ {
"clientName": "ABC"
"firstName": "Suynil",
"lastName": "Seelam",
"email": "ss.seelam@gmail.com",
"reqTitle": "Java"}]success:true,total:768}
Не могли бы вы подсказать мне, как я могу достичь этого. У меня есть проблемы на долго над этой проблемой!Я попробовал немного и получил что-то вроде этого.
private Map<String,Object> getMap(List<CandidateStatus> candidatestatus){
Map<String,Object> modelMap = new HashMap<String,Object>(3);
Map<String,Object> candDetails = new HashMap<String,Object>(7);
Iterator<CandidateStatus> iterator=candidatestatus.iterator();
CandidateStatus astring = new CandidateStatus();
String Client;
String Fname;
String Lname;
String Email;
String Phone;
String Status;
String Require;
while(iterator.hasNext())
{
astring = iterator.next();
/*System.out.println(astring.getCandidate().getFirstName());
System.out.println(astring.getCandidate().getLastName());
System.out.println(astring.getCandidate().getEmail());
System.out.println(astring.getStatusTitle());
System.out.println(astring.getRequirement().getReqTitle());*/
Client = astring.getRequirement().getClient().getClientName();
Fname = astring.getCandidate().getFirstName();
Lname = astring.getCandidate().getLastName();
Email = astring.getCandidate().getEmail();
Phone = astring.getCandidate().getPhone();
Status = astring.getStatusTitle();
Require= astring.getRequirement().getReqTitle();
candDetails.put("clientName",Client);
candDetails.put("firstName",Fname);
candDetails.put("lastName",Lname);
candDetails.put("email",Email);
candDetails.put("phone",Phone);
candDetails.put("statusTitle",Status);
candDetails.put("reqTitle",Require);
//jsonMap.put("root", candDetails);
//System.out.println(jsonMap);
}
//System.out.println("----"+candDetails+"----");
modelMap.put("success", true);
modelMap.put("total",candDetails.size());
modelMap.put("data",candDetails );
return modelMap;
Теперь, когда я пытаюсь добавить candDetails к модели, я получаю только запись LAST . Почему ???
Спасибо