2012-10-18 3 views
3

컨트롤러의 동일한 메서드를 JSP 및 기타 MIME 유형 (예 : XML 및 JSON)에 모두 사용할 수 있습니까?JSON 및 JSP가있는 스프링 MVC 컨트롤러

다음과 같은 방법으로 스프링 MVC에서 뷰를 해결할 수 있습니다.

  1. 뷰 이름을 돌려 String@ResponseBody 주석

I와 뷰 이름과 모델

  • 반환과 Model 또는 ModelMap
  • 돌려 ModelAndViewObject을 속성을 추가 JSP를 처리 할 때 1 또는 2를 사용하고 JSON 또는 XML을 반환 할 때 3을 사용합니다.

    내가 처리 할 수있는 MIME 유형을 정의하기 위해 두 가지 방법을 사용하고 @RequestMapping(headers="accept=application/xml") 또는 @produces 주석을 사용할 수 있음을 알고 있지만 단 한 가지 방법으로이를 수행 할 수 있습니까?

    컨트롤러 로직은 매우 간단하며 똑같은 모델을 반환하는 두 가지 메소드를 매핑하는 것이 불필요한 복제처럼 보입니다.

  • +0

    참조 http://stackoverflow.com/questions/6568414/content-negotiation-in-spring-mvc – ebaxt

    +0

    @ - 나는 복잡한 JSON을 반환해야하는 경우 물론, 나는 확실히 잭슨 컨버터를 등록 할 것 ebaxt'RequestMapping'을 사용하여 한 메소드가 JSON으로 응답하고 다른 메소드가 JSP로 응답 할 수 있다는 것을 알고 있습니다. 질문은 같은 방법으로 JSON과 JSP를 어떻게 처리 할 것인지 묻는 것이 었습니다. – vopilif

    +0

    아 - 미안 해요, 그걸 잡지 않았어 :) – ebaxt

    답변

    3

    예,이 ... 스프링 MVC 3.x의에서 정직

    당신은 기본적으로 그냥 일반 JSP 페이지 뷰에 대한 귀하의 컨트롤러 메서드를 작성하고 당신이 당신의 디스패처 서블릿 설정에 ContentNegotiatingViewResolver 콩을 구성합니다. 어느 요청 된 MIME 유형 (또는 파일 확장자)을보고 적절한 출력 유형을 리턴합니다.

    +0

    감사! 이것은 효과가 있으며 결국 내가 결국 사용하게되었습니다.또한'modelKeys' 필드를'MappingJacksonJsonView' 필드로 설정하여 전체 모델을 렌더링하지 않도록하는 것이 유용하다는 것을 알았습니다.이 방식으로 모델 키즈에 정의 된 키만 JSON으로 렌더링되고 모델의 나머지 부분은 JSP보기. – vopilif

    0

    Spring 3 MVC ContentNegotiatingViewResolver Example 내가 최근에 매우 동일한 요구가 있고, 아래에있는 내 코드는 다음과 같습니다

    여기 지침을 따르십시오. validateTicket은 jsp 이름을 반환하고 sendForgotPassword 메일은 json을 반환합니다. 제 봄 버전은 4.0.0입니다. http://docs.spring.io/spring/docs/4.0.x/javadoc-api/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.html

    <?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> 
    
    
    <context:component-scan base-package="foo.bar" /> 
    <bean id="viewResolver" 
        class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
        <property name="viewClass" 
         value="org.springframework.web.servlet.view.JstlView" /> 
        <property name="prefix" value="/WEB-INF/jsp/" /> 
        <property name="suffix" value=".jsp" /> 
    </bean> 
    </beans> 
    
    @Controller 
    @RequestMapping("/forgot-password") 
    public class ForgotPasswordController { 
    
    @RequestMapping(value="/reset-password", method = RequestMethod.GET) 
    public String validateTicket(@RequestParam String ticket, @RequestParam String emailAddress) { 
        return "resetPassword"; 
    } 
    
    @RequestMapping(value="/send-mail", method = RequestMethod.POST, produces="application/json") 
    public @ResponseBody String sendForgotPasswordMail(@RequestParam String emailAddress) throws LoginException { 
        return "{\"success\":\"true\"}"; 
    } 
    } 
    
    관련 문제