Today
-
Yesterday
-
Total
-

ABOUT ME

-

  • Spring Boot | return jsonView 사용, JSON 데이터로 응답
    ▼ Backend/스프링 (Spring) 2021. 8. 4. 12:15
    반응형

    org.thymeleaf.exceptions.TemplateInputException: Error resolving template [jsonView]
    template might not exist or might not be accessible by any of the configured Template Resolvers

     

    클라이언트에서 요청한 데이터를 JSON(JavaScript Object Notation) 형식으로 리턴할 때

    Model 또는 ModelAndView에 데이터를 담아 jsonView로 설정했지만 에러 발생

     

    Case1, Case2와 같이 데이터를 jsonView로 리턴 중일 때 발생

     

    //Case1
    @PostMapping("/login/action.ajax")
    public String loginAction(Model model) throws Exception {
    	model.addAttribute("code", "code_data");
    	return "jsonView";
    }
    
    //Case2
    @PostMapping("/rewrite/action.ajax")
    public ModelAndView rewriteAction() throws Exception {
    	ModelAndView mav = new ModelAndView("jsonView");
    	mav.addObject("code", "code_data");
    	
    	return mav;
    }

     

    # jsonView을 사용하기 위한 설정

    @Configuration 사용 시

     

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
    
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Bean
        MappingJackson2JsonView jsonView() {
        	return new MappingJackson2JsonView();
        }
    }

     

     

    DispatcherServlet 사용 시

     

    <bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
        <property name="contentType" value="application/json;charset=UTF-8"> </property>
    </bean>

     

     


    Error resolving template [/login/action.ajax] template might not exist or might not be accessible by any of the configured Template Resolvers

     

    @ResponseBody 어노테이션 추가

     

    @PostMapping("/login/action.ajax")
    @ResponseBody
    public HashMap<String, String> loginAction() throws Exception {
    	HashMap<String, String> returnMap = new HashMap<>();
    	returnMap.put("code", "code_data");
    		
    	return returnMap;
    }

     

    @ResponseBody를 메서드마다 추가하기 번거롭다면

    @Controller를 @RestController로 변경한다.

    하위의 메서드마다 @ResponseBody가 자동 생성된다.

     

    반응형

    댓글

Designed by Tistory.