suu
30
2021-02-25 10:59:33 작성 2021-02-25 11:00:06 수정됨
6
266

spring boot


spring boot 공부를 하고 있습니다.


@RestController 
public class DemoControllerTest {
	
	//http://localhost:8081/test
	@GetMapping("/test")
	public ModelAndView test() throws Exception {
		ModelAndView mav = new ModelAndView("test");
		mav.addObject("name","goddaehee");
		
		List<String> testList = new ArrayList<String>();
		testList.add("a");
		testList.add("b");
		testList.add("c");
		
		mav.addObject("list",testList);
		return mav;
	}
	
}

localhost:8081/test 주소 접속한 결과

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Feb 25 10:53:17 KST 2021
There was an unexpected error (type=Internal Server Error, status=500).
Circular view path [test]: would dispatch back to the current handler URL [/test] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
javax.servlet.ServletException: Circular view path [test]: would dispatch back to the current handler URL [/test] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

이런 오류가 발생합니다... 

아무리 찾아봐도 어떻게 해결해야할지 모르겠어요ㅜㅜ

thymeleaf공부중이었습니다...

0
  • 답변 6

  • 퀘이사123
    552
    2021-02-25 11:08:49

    확실한건 아닙니다만.

    @RestController를 -> @Controller로 바꿔보세요.


    @RestController 이게 @responsebody랑 @Controller 이거 합친건데

    어떠한 데이터를 리턴받는다는건데

    view페이지를 리턴해서 에러가 나는걸지도?

  • 하루를 즐겁게
    542
    2021-02-25 11:15:44

    Spring boot를 사용하고 따로 DispatcherServlet xml을 사용해서 설정하지 않는다면, @Configuration 을 붙인 WebConfig 파일에서 Bean으로 등록

    1
    2
    3
    4
        @Bean
        MappingJackson2JsonView jsonView(){
            return new MappingJackson2JsonView();
        }
    cs


    - Controller에서 return할 ModelAndView를 생성 할 때 View를 "jsonView"로 설정

    (예시)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        ModelAndView mv = new ModelAndView("jsonView");
        userVO.setOrderBy(orderDir);
        userVO.setOrderId(orderColNm);
        
        List<UserVO> userList = userMgmtSvc.selectUserList(userVO);
        int totalCnt = userMgmtSvc.selectUserListCount(userVO);
        
        mv.addObject("recordsTotal", totalCnt);
        mv.addObject("recordsFiltered", totalCnt);
        mv.addObject("data", userList);
        
        return mv;
    cs
  • suu
    30
    2021-02-25 11:16:52

    퀘이사123 님 말씀하신대로 @Controller로 바꿨는데 오류가 납니다. 

    spring이랑 view를 연결하고 있는 것을 학습하고 있긴한데, 그럼 리턴값을 바꿔야하나요??

  • 오늘도공부
    250
    2021-02-25 11:17:32

    @RestController는 @ResponseBody + @Controller가 합쳐진 어노테이션 입니다.

    @ResponseBody가 적용되면 return 되는 값은 View로 return 되는 것이 아닌 HTTP Response Body에 쓰여지게 됩니다.

    근데 현재 test() 코드에서는 view와 관련된 객체를 return 하기 때문에 오류가 발생하는 것입니다.

    현재 코드에서 view를 사용하신 다면 @RestController가 아닌 @Controller를 사용하셔야 합니다.

  • 스트라
    557
    2021-02-25 11:20:03 작성 2021-02-25 11:21:10 수정됨

    viewResolver 설정은 잘 되었나요?

    에러 내용은 /test 를 요청했을 때 재귀적으로 /test를 또 호출해서 발생한다는 내용인데요.

    예를 들어 아래와 같이 설정했다면

    spring.thymeleaf.prefix=classpath:templates/

    spring.thymeleaf.suffix=.html


    ModelAndView("test") -> test.html 파일을 찾아 표출 했겠죠?


    참고: https://eblo.tistory.com/54

  • suu
    30
    2021-02-25 16:25:46
  • 로그인을 하시면 답변을 등록할 수 있습니다.