로직에 따라 Spring MVC 컨트롤러에서 뷰를 반환하고 싶습니다. 오류가 발생하면 JSON을 반환하고 그렇지 않은 경우 HTML보기를 반환합니다. 이것은 ASP.NET MVC ActionResult와 같습니다. 모든 종류의 뷰를 반환 할 수 있으며 결과를 렌더링하며 요청에서 전송되는 내용 유형에 종속되지 않습니다. 나는 이것의 어떤 예를 찾을 수 없다.Spring MVC 컨트롤러에서 JSON 또는 View를 반환하십시오.
답변
나는 이것을 다음과 같이 수행했다.
@RequestMapping(value="/users", method=RequestMethod.POST)
public Object index(@RequestBody SearchUsersViewModel model, HttpServletResponse response) {
model.setList(userService.getUsers(model));
if(true)
{
return new ModelAndView("controls/tables/users", "model", model);
}
else
{
return JsonView.Render(model, response);
}
}
JsonView.자바는 친 후앙의 답변을 확장하기 위해 전화를
config.request = $
.ajax({
url : url,
data : $.toJSON(def.data),
type : def.type,
dataType : def.dataType,
processData : true,
contentType : def.contentType,
success : function(data) {
try {
var json = data;
if (typeof data === "String" || typeof data == "string") {
json = (eval('(' + data + ')'));
}
if ('object' === typeof json) {
if (json.Validation && json.Validation.Errors.length > 0) {
$.each(json.Validation.Errors, function() {
// Error Code Check
});
// Error Callback
if (typeof (def.errorCallback) == 'function') {
def.errorCallback(json);
}
} else {
def.callback(data);
}
} else {
def.callback(data);
}
} catch (e) {
def.callback(data);
// Hide Loading
}
},
error : function(data) {
}
});
코드에'if (true)'가 있습니다 - JSON이 언제 반환됩니까? – Paul
방금 테스트를하고있었습니다. 반환 객체에서 오류가 있는지 테스트 한 다음 json을 반환하고, 그렇지 않으면 HTML을 반환합니다. –
아마 당신은 ResolveBundleViewResolver을 볼 수 있습니다.보기를 혼합 할 수 있습니다. docs은이를 사용하는 방법에 대한 정보를 제공합니다. 워드 프로세서 (예 타일과 JSTL을 혼합하는 것이지만,뿐만 아니라 다른 사람을 위해 신청해야합니다)에서
...컨텍스트 파일
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="views"/>
</bean>
views.properties
...
welcomeView.(class)=org.springframework.web.servlet.view.tiles2.TilesView
welcomeView.url=welcome (this is the name of a Tiles definition)
vetsView.(class)=org.springframework.web.servlet.view.tiles2.TilesView
vetsView.url=vetsView (again, this is the name of a Tiles definition)
findOwnersForm.(class)=org.springframework.web.servlet.view.JstlView
findOwnersForm.url=/WEB-INF/jsp/findOwners.jsp
...
조건에 따라 다른 논리보기 이름을 반환하도록 컨트롤러를 프로그래밍하십시오. 예를 들어 :
@RequestMapping(value="/hello/{name}", method=RequestMethod.GET)
public ModelAndView hello(@PathVariable String name) {
String viewName = (name.length() > 1) ? "hello" : "error";
ModelAndView mav = new ModelAndView(viewName);
mav.addObject("name", name);
return mav;
}
구성 뷰 리졸버는 JSON 뷰로 뷰 이름 "error"
를 해결합니다. bean 정의 XML 파일을 읽어
- XmlViewResolver, 특성 파일을 읽어
- ResourceBundleViewResolver, 그리고 애플리케이션 컨텍스트에 보이는
- BeanNameViewResolver : 봄을 포함한지도를 볼 수있는 뷰 이름을 구성하는 여러 가지 방법을 제공합니다 뷰 이름과 같은 이름을 가진 bean을위한 DispatcherServlet 실행.
예를 들어,하는 BeanNameViewResolver를 사용 :
<bean name="error" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1"/>
</bean>
다만 경우에 당신은 당신이 다음 할 수있는 예외에 JSON을 반환하려면 :
@ExceptionHandler(Exception.class)
@ResponseBody
public void handleIOException(Exception exception,HttpServletRequest request, HttpServletResponse response) {
response.setContentType("application/json");
String json = "{\"Name\": 50}";
PrintWriter out= response.getWriter();
out.write(json);
}
난 그 확실하지 않다 이게 네가하고 싶은 일이지만 .... 단지의 경우 ... :)
이며, 이걸 잡아 JSON을 돌려 주겠습니까? –
나는 네가 기억하는 한 그것을 잡을 것이다. –
View
컨트롤러 메서드에서 직접 개체를 가져올 수 있습니다. 뷰 이름 일 필요는 없습니다. 따라서 컨트롤러는 자신의 로직을 사용하여 View
객체를 생성하고 ModelAndView
객체에 랩핑되었거나없이 객체를 반환 할 수 있습니다.
ViewResolver
프레임 워크가이 작업을 수행하지 못하도록 설득하는 것보다 쉽습니다.
하게
public class JsonView {
public static ModelAndView Render(Object model, HttpServletResponse response)
{
MappingJacksonHttpMessageConverter jsonConverter = new MappingJacksonHttpMessageConverter();
MediaType jsonMimeType = MediaType.APPLICATION_JSON;
try {
jsonConverter.write(model, jsonMimeType, new ServletServerHttpResponse(response));
} catch (HttpMessageNotWritableException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
JS 기능, 여기에 나를 위해 작동하는 것이다. 구성이 필요하지 않습니다.
response.setStatus(500);
return new ModelAndView(new MappingJacksonJsonView(), model);
그러면 자동으로 모델이 JSON으로 변환되고 응답에 기록됩니다. 여기 모델 형 Map<String,Object>
이며 에러가 일어난 경우에 제어기 응답 형 HttpServletResponse
반환 할 때마다 새 JSON보기를 인스턴스화하는 것은 좋지 않습니다. –
좋은 생각은 @ JukkaDahlbom입니까? –
- 1. Spring-MVC 컨트롤러에서 다중 컨텐츠 유형 지원
- 2. 컨트롤러에서 다른보기를 반환하십시오.
- 3. 컨트롤러에서 Spring MVC, Return ModelAndView 문이 무시됩니다.
- 4. Asp.Net MVC 컨트롤러에서 JSON 객체 비 직렬화
- 5. Spring MVC + Jackson : Dynamic Json serialization
- 6. Spring MVC 3.0으로 대칭형 JSON 제작/사용
- 7. spring ajax json jquery
- 8. Asp.net MVC json 또는 Json.net?
- 9. Spring MVC 3.0.5 컨트롤러에서 JPA 엔티티가 데이터베이스에 유지되지 않음
- 10. Spring MVC 인터페이스를 구현하는 컨트롤러에서 @Controller를 사용하여 문제가 발생했습니다.
- 11. JQuery JQGrid : Spring MVC 3에서 JSON 데이터를로드하는 방법 @RequestBody
- 12. Spring MVC 컨트롤러의 트랜잭션 롤백
- 13. Vaadin과 Spring MVC 통합
- 14. Server.Transfer가 MVC-View를 렌더링 할 수 없습니다.
- 15. iPhone에서 Mvc Mobile View를 렌더링하는 방법은 무엇입니까?
- 16. ASP.NET MVC View를 프로파일 링하는 방법은 무엇입니까?
- 17. MVC Return Json 결과
- 18. Spring MVC 2.5 또는 3 용 가이드
- 19. asp.net mvc 3 json 값 컨트롤러에서 수신하지 않는
- 20. 컨트롤러에서 Json 결과를 반환하는 경우
- 21. 컨트롤러에서 JSON 객체의 값이 손실됩니다.
- 22. MVC 컨트롤러에서 코드 복제
- 23. 컨트롤러에서 MVC 삽입/업데이트
- 24. $ .Ajax Post에서 PartialView를 반환하십시오.
- 25. Spring MVC - 컨트롤러가 MappingJacksonJsonView를 생성하도록합니다.
- 26. JSON 객체와 Spring 모델 객체
- 27. JSP/Java에서 premade .json 파일을 반환하십시오.
- 28. Spring MVC - AJAX-JSON 렌더링 된 JSP 뷰 포함 응답
- 29. Spring MVC 3.0 및 ExtJS의 JSON 및 Firefox
- 30. jqgrid/mvc 3 - 컨트롤러에서 그리드 호출 방법?
http://stackoverflow.com/questions/6173093/spring-return-json-from-controller-as-modelandview – Bozho