복붙노트

[SPRING] 스프링 MVC 컨트롤러 리턴 타입

SPRING

스프링 MVC 컨트롤러 리턴 타입

컨트롤러가 String을 반환하는 예제를 보았습니다 (뷰를 나타냄)

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);  
  model.addAttribute("owner", owner);  
  return "displayOwner"
}

또한 컨트롤러에서 "ModelAndView"객체 유형을 반환하는 예제도 있습니다.

public ModelAndView helloWorld() {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("helloWorld");
    mav.addObject("message", "Hello World!");
    return mav;
}

이 둘의 차이점은 무엇이며 어떤 것을 사용해야합니까? 왜냐하면 어느 쪽이든 내 견해를 해결할 수 있기 때문입니다.

해결법

  1. ==============================

    1.MVC 3에 대해 말하면, 둘 다 맞습니다. 그러나 ModelAndView를 직접 반환하는 것은 낡은 방식이며보다 구두 적입니다.

    MVC 3에 대해 말하면, 둘 다 맞습니다. 그러나 ModelAndView를 직접 반환하는 것은 낡은 방식이며보다 구두 적입니다.

    @ResponseBody가없는 문자열 만 반환하는 경우이 문자열은보기 이름으로 취급되며 봄은이를 확인자에게 보냅니다. 따라서 컨트롤러를 작성하는 동안 걱정할 필요가 없습니다. , 어떤 유형의 뷰 렌더러를 사용할 것인가 (jsp 또는 velocity가 될지는 중요하지 않음). Model 인스턴스 만 전파하고 다음에 수행 할 작업에 대한 힌트를 반환합니다. 적절한 ModelAndView 객체는 나중에 내부적으로 문자열로 만들어집니다.

    일반적으로, 스프링 3은 인자와 리턴 타입에 더 많은 유연성을 제공한다 (Spring documentaton의 @RequestMapping 핸들러 메소드 정의하기 섹션 참조).

  2. ==============================

    2.그것은 같은 논리이지만 스프링의 같은 버전이 아닙니다.

    그것은 같은 논리이지만 스프링의 같은 버전이 아닙니다.

    ModelAndView 객체는 모델 및 뷰를 처리하는 스프링 2.x 방식입니다. 당신이 준 예제에서, modelandview 객체는 "helloWorld"뷰를로드 할 것입니다 (여러분의 템플릿 엔진에 따라 helloWorld.jsp 또는 helloWorld.html, ...) 모델에 하나의 데이터 "message"가 있습니다.

    다른 방법은 봄 3.x 방식입니다. 헬로우 월드와 똑같은 예를 썼을 수도 있습니다.

    @RequestMapping(value="/helloWorld", method=RequestMethod.GET)
    public String helloWorld(Model model) {
        model.addAttribute("message", "Hello World!");
        return "helloWorld";
    }
    

    요청시 모델이 자동으로 채워집니다.

    그리고 "helloWorld"라는 URL 맵핑이 직접 뷰 이름이므로이 표기법을 단순화 할 수 있습니다.

    @RequestMapping(value="/helloWorld", method=RequestMethod.GET)
    public void helloWorld(Model model) {
         model.addAttribute("message", "Hello World!");
    }
    

    안녕하세요 세계보기가 자동으로로드됩니다.

  3. ==============================

    3.Spring MVC에서 jsp 페이지를 렌더링하려면 ModelAndView를 리턴해야한다.

    Spring MVC에서 jsp 페이지를 렌더링하려면 ModelAndView를 리턴해야한다.

    예 :

    @RequestMapping(value="/index.html", method=RequestMethod.GET)
        public ModelAndView indexView(){
            ModelAndView mv = new ModelAndView("index");
            return mv;
        }    
    

    이 함수는 /index.html을 치면 index.jsp를 반환합니다.

    또한 @ResponseBody 주석 및 serializer를 사용하여 모든 JSON 또는 XML 객체를 반환 할 수 있습니다.

    예 :

    @RequestMapping(value="/getStudent.do",method=RequestMethod.POST)
        @ResponseBody
        public List<Student> getStudent(@RequestParam("studentId") String id){
            List<Student> students = daoService.getStudent(id);
            return students;
        }
    

    이 예제에서는 JSON으로 List를 반환하고 Jackson serializer를 활성화했다. 이 기능을 사용하려면 Spring XML에 다음을 추가해야한다.

    <context:annotation-config/> 
    

    그리고 Serializer 자체 :

    <bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
      <list>
        <ref bean="jacksonMessageConverter"/>
      </list>
    </property>
    </bean>
    

    희망이 도움이됩니다.

  4. ==============================

    4.ModelAndView 또는 문자열을 반환하면 동일한 작업을 수행합니다. 뷰 (JSP 페이지)로 해석되고 뷰에 렌더링 될 모델 객체를 제공합니다. 문자열을 반환하면 spring은 내부적으로 viewResolver를 사용하여 뷰로 해석하고 ModelAndView 객체를 만들어 반환합니다. ModelAndView 객체의 반환은 이전 버전에서 가져온 것입니다. 당신은 당신의 편리함에 기초하여이 중 하나를 할 수 있습니다.

    ModelAndView 또는 문자열을 반환하면 동일한 작업을 수행합니다. 뷰 (JSP 페이지)로 해석되고 뷰에 렌더링 될 모델 객체를 제공합니다. 문자열을 반환하면 spring은 내부적으로 viewResolver를 사용하여 뷰로 해석하고 ModelAndView 객체를 만들어 반환합니다. ModelAndView 객체의 반환은 이전 버전에서 가져온 것입니다. 당신은 당신의 편리함에 기초하여이 중 하나를 할 수 있습니다.

    이 질문을 보아라.

    또한 많은 답변이 @RequestBody를 지적하고 있습니다. 귀하의 질문과 정확히 관련이 없습니다. 그러나 사용 가능한 변환기를 사용하여 컨텐트 유형을 기반으로 개체를 변환하고 resuly는 문서 본문의 일부가 될 것이라는 점을 명심하십시오.

  5. ==============================

    5.freemarker 나 velocity와 같은 템플릿 언어를 사용하여 응답을 생성한다면 ModelAndView를 반환 할 수 있습니다.

    freemarker 나 velocity와 같은 템플릿 언어를 사용하여 응답을 생성한다면 ModelAndView를 반환 할 수 있습니다.

    응답으로 json / xml 또는 일부 문자열 (예 : ajax 요청)을 반환하려는 경우 첫 번째 방법을 사용할 수 있습니다. public @ResponseBody String findOwner (@PathVariable String ownerId, Model model)를 public으로 설정해야한다고 생각합니다. 반환 된 값을 응답 텍스트로 변환해야 함을 나타 내기 위해 @ResponseBody라는 주석을 추가해야합니다. @ResponseBody를 사용하면 Jackson이나 JaxB와 같은 라이브러리를 사용하여 각각 json / xml 응답을 만들 수 있습니다.

    이러한 반환 값은 AnnotationMethodHandlerAdapter에 등록 된 messageConverters를 사용하여 변환됩니다.

    참조 : http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/

  6. ==============================

    6.

    public String findOwner(@PathVariable String ownerId, Model model) {
      Owner owner = ownerService.findOwner(ownerId);  
      model.addAttribute("owner", owner);  
      return "displayOwner"
    }                       
    

    이 메소드에서 리턴 유형은 String이고 모델을 매개 변수로 추가하여 우리가 추가 할 모델 값을 추가합니다

     modelparam.addAttribute("obj",value);  
    

    뷰 확인자에 따라 jsp로 displayowner로 돌아갑니다.

    public ModelAndView helloWorld() {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("helloWorld");
        mav.addObject("message", "Hello World!");
        return mav;
    }
    

    이 메서드에서 반환 유형은 ModelAndView이므로 모델을 반환합니다. 여기서 mav는 ModelAndView의 객체이므로 여기에 다음과 같이 추가해야합니다.

    model.addObject("object","value");
    

    여기에서 viewname은 viewResolver에 따라 helloworld.jsp에 반환됩니다.

  7. from https://stackoverflow.com/questions/7383622/spring-mvc-controllers-return-type by cc-by-sa and MIT license