inflearn logo
강의

講義

知識共有

Spring Web MVC

ハンドラメソッド 5部 @ModelAttribute

세션에서 넘어오는 데이터 바인딩

解決済みの質問

458

jaden

投稿した質問数 44

0

강의 3분 정도의 설명에 session 에 있는 데이터를 받아와 @ModelAttribute 의 객체에 바인딩이 가능하다고 하셔서, 테스트를 작성해봤지만 실패해 테스트를 어떻게 작성해야하는지 질문드립니다.. 제가 시도한 방법은 다음과 같습니다. 

<컨트롤러>

@Controller
public class TestController {

    @PostMapping("/session")
    @ResponseBody
    public Event sessionTest(@ModelAttribute Event event){
        return event;
    }

}

<테스트 코드 >

@WebMvcTest
class TestControllerTest {

    @Autowired
    MockMvc mockMvc;

    @Test
    void sessionTest() throws Exception {

        MockHttpSession session = new MockHttpSession();
        session.setAttribute("name", "jaden");


        mockMvc.perform(post("/session")
        .session(session)
        .param("limit", "10"))
                .andDo(print())
                .andExpect(status().isOk());
    }

}

<실행결과>

세션을 목업해서 넘겨봤는데, 바인딩이 되지 않아 null 이 찍힙니다.  

또한, 

두번째로 시도한 방법은 mockMvc 에 .sessionAttr 을 넣을 수 있어서 사용해 봤습니다.

<테스트코드>

@Test
    void test2() throws Exception{
        mockMvc.perform(post("/session")
        .sessionAttr("limit", "10")
        .param("name", "jaden"))
                .andDo(print())
                .andExpect(status().isOk());
    }

<실행결과>

하지만 마찬가지로 바인딩이 잘 되지 않는 것 같더라구요.. 

어떻게 테스트 코드를 작성해야 제대로 바인딩을 할 수 있을까요? 

--- 

아니면 혹시, session 에서 값을 받아와 setter 를 통해 직접 바인딩 해줄 수 있기 때문에 그렇게 말씀하신걸까요? 

좋은 강의 감사드립니다! 

MVC java spring

回答 3

1

whiteship

귿! 잘 하셨어요.

1

whiteship

@SessionAttributes랑 같이 사용해야 하는데 뒤에 이어지는 수업에서 다룰테니 여기서는 이 애노테이션만 언급하겠습니다. 테스트 코드는 그좋아보여요. 이렇게 테스트 하시면서 학습하시면 실력이 많이 늘꺼에요.

0

jaden

감사합니다. 답변과 이어지는 강의를 참고해 다음과 같이 수정해 테스트 코드를 작성했습니다. 

혹시나 해서, 코드 남겨놓도록 하겠습니다.

<컨트롤러>

@Controller
@SessionAttributes("event")
public class TestController {

    @PostMapping("/session/input")
    @ResponseBody
    public Event sessionInput(Model model){
        Event event = new Event();
        event.setName("jaden");
        model.addAttribute("event", event);
        return event;
    }

    @PostMapping("/session")
    @ResponseBody
    public Event sessionTest(@ModelAttribute Event event){
        return event;
    }
}

<테스트코드>

@WebMvcTest
class TestControllerTest {

   @Autowired
    MockMvc mockMvc;

   @Test
    void sessionTest() throws Exception {
       MockHttpServletRequest request = mockMvc.perform(post("/session/input"))
               .andExpect(status().isOk())
               .andReturn().getRequest();
       assertThat(request.getSession().getAttribute("event")).isNotNull();

       mockMvc.perform(post("/session")
        .session((MockHttpSession) request.getSession())
        .param("limit", "10"))
               .andDo(print());
   }
}

<실행결과> 

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = [Content-Type:"application/json", Cache-Control:"no-store"]
     Content type = application/json
             Body = {"id":null,"name":"jaden","limit":10}
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

7:58 예제 코드 찾는 법

0

255

2

PATCH의 Idempotent에 대한 질문

0

257

1

2:51초 질문입니다.

0

324

1

만약 어플리케이션컨텍스트에 필터를 설정하지 않으면 어떻게되나요?

0

361

0

web.xml에 위치한 애플리케이션 web.xml 내에서 파싱 오류 발생

0

514

0

Spring Boot 2.6 이상 버전에서의 DispatcherServlet

0

366

1

Event`Xxx`Controller 분리할때의 기준에 관한 질문입니다.

0

634

1

11분 57초 쯤, `returnValueHandlers` 들의 네이밍컨벤션 관련 질문입니다.

0

379

1

@EnableWebmvc 설정을 하면

0

415

1

springframework와의 차이점

0

283

1

@RequestBody의 바인딩에러를 잡는 방법

1

1655

2

안녕하세요 기선님 강의를 보다 서블릿에 궁금증이 생겨 질문 드립니다

1

236

1

HelloService의 값을 전달을 못 받습니다.

0

295

1

ServletContext와 WebApplicationContext의 관계 질문

1

740

1

하나의 서비스에, 두개의 리포지토리도 연결이 되나요?

0

363

1

view name 리턴에 대해

0

290

2

Formatter print 질문 드립니다.

0

232

1

에리 메시지가 한글입니다.

0

293

1

java 클래스파일로 설정되어 있던 것을 web.xml로 바꾸는 경우

0

337

1

@RequestParam

0

255

1

@Retention 질문

0

228

1

Event.builder() 관련 mac에서 lombok 문제 있으신 분들

0

197

1

스프링 부트 사용시 WebMvcConfigurerSupport 클래스

0

251

1

http://localhost:8080/hello 입력시 오류

0

487

4