스프링 부트

[SpringBoot] @Controller ModelAndView jsonView 적용하기

h__hj 2022. 8. 9. 21:14

Spring Boot @Controller ModelAndView jsonView 적용하기

 Web Application 에서 ModelAndView를 사용할 때 @ResponseBody 어노테이션 대신 jsonView를 이용하여 응닶데이터를 json 형식으로 내려주기!

# 환경

/**
 * tool: STS 4.13.0
 * version: 2.7.3-SNAPSHOT
 * java: 1.8
 * type: MAVEN
 * view: THYMELEAF
 */

# Bean

/* jsonView Data Converter (new ModelAndView("jsonView")) */ 
@Bean
public MappingJackson2JsonView jsonView() {
    return new MappingJackson2JsonView();
}

# 테스트

/* jsonView */
@PostMapping("/form1")
public ModelAndView form1(ModelAndView mav, @ModelAttribute TestPVO testPVO) {
    log.debug("[PARAMETER] {}", testPVO);
		
    mav.setStatus(HttpStatus.OK);
    mav.setViewName("jsonView");
		
    mav.addObject("text", testPVO.getText());
    mav.addObject("html", testPVO.getHtml());
    mav.addObject("script", testPVO.getScript());
    return mav;
}
/* ResponseBody */
@PostMapping("/form2")
@ResponseBody
public TestPVO form2(@ModelAttribute TestPVO testPVO) {
    log.debug("[PARAMETER] {}", testPVO);
    return testPVO;
}

# 결과

{
    "html":"<div>Hello World<div>",
    "text":"test",
    "script":"<script>function test() { alert('hello world!');}</script>",
}

# 내용

  • @RestController 에선 사용하진 않지만, @Controller에서 자주 사용된다.
  • return을 ModelAndView를 사용 한다면, 메소드 마다 @ResponseBody를 붙이지 않고 setViewName("jsonView") 나 new ModelAndView("jsonView")로 생성하여 사용한다.
  • 화면 Contoller에서 ajax 호출 시 응답을 json으로 받을 때 용이하다.