json/xml을 반환하는 나머지 응용 프로그램이 있습니다. 나는 변환을 위해 잭슨과 잭버스를 사용한다. 일부 메소드는 query_string을 승인해야합니다. @ModelAttribute를 사용하여 query_string을 객체에 매핑했지만 객체가 내 뷰에 강제로 표시됩니다. 개체를보기에 표시하지 않습니다.보기에서 ModelAttribute를 생략합니다.
@ModelAttribute 이외의 것을 사용해야한다고 생각하지만 바인딩을 수행하는 방법을 알아낼 수는 있지만보기를 수정하지는 않습니다. @ModelAttribute 주석을 생략하면 객체가 뷰에 변수 이름으로 나타납니다 (예 : "sourceBundleRequest").
예 URL :
http://localhost:8080/rest/sourcebundles/?updateDate=20100501&label=urgent
컨트롤러 방법 :
@RequestMapping(value = {"", "/"}, method = RequestMethod.GET)
public String getAll(@ModelAttribute("form") SourceBundleRequest sourceBundleRequest, BindingResult result, ModelMap model) throws ApiException {
// Detect and report errors.
if (result.hasErrors()) {
// (omitted for clarity)
}
// Fetch matching data.
PaginatedResponse<SourceBundle> sourceBundleResponse = null;
try {
int clientId = getRequestClientId();
sourceBundleResponse = sourceBundleService.get(clientId, sourceBundleRequest);
} catch (ApiServiceException e) {
throw new ApiException(ApiErrorType.INTERNAL_ERROR, "sourceBundle fetch failed");
}
// Return the response.
RestResponse<PaginatedResponse> restResponse = new RestResponse<PaginatedResponse>(200, "OK");
restResponse.setData(sourceBundleResponse);
model.addAttribute("resp", restResponse);
// XXX - how do I prevent "form" from appearing in the view?
return "restResponse";
}
예제 출력 :
"form": {
"label": "urgent",
"updateDate": 1272697200000,
"sort": null,
"results": 5,
"skip": 0
},
"resp": {
"code": 200,
"status": "OK",
"data": {
"totalAvailable": 0,
"resultList": [ ]
}
}
원하는 출력 :
"resp": {
"code": 200,
"status": "OK",
"data": {
"totalAvailable": 0,
"resultList": [ ]
}
}
,363,210
생략 @ModelAttribute ("양식")
단순히 @ModelAttribute ("양식")를 생략하면, 난 여전히 바람직하지 않은 응답을하지만, 들어오는 양식 개체 이름으로 지정됩니다. 응답은 다음과 같습니다 다시보기에 와서 양식을하지 않으려면
"resp": {
"code": 200,
"status": "OK",
"data": {
"totalAvailable": 0,
"resultList": [ ]
}
},
"sourceBundleRequest": {
"label": "urgent",
"updateDate": 1272697200000,
"sort": null,
"results": 5,
"skip": 0
}
을 테스트하지 않았습니다. 세부 사항으로 OP를 업데이트했습니다. 현재 @ ResponseBody 라우트를 사용하지 않기를 바란다. 내 명시적인 뷰 매핑이 좋으며 Accept 헤더 문제에 참여하고 싶지 않습니다. –