레알윙 2020. 4. 22. 12:28
반응형

ContentNegotiatingViewResolver

ViewResolver 중에 하나로, 들어오는 요청의 accept header( 클라이언트가 서버에게 원하는 응답을 요청하는 것 )에 따라 응답이 달라진다.

 

어떤한 요청이 들어오면 그 요청의 응답을 만들 수 있는 모든 view를 찾아내고, 최종적으로 accept header의 view 타입과 비교하여 선택한다.

 

accpet header가 없는 요청인 경우 format이라는 매개변수를 사용한다.

 

 

@RunWith(SpringRunner.class)
@WebMvcTest(SrpingController.class)
public class SrpingControllerTest {
	
	@Autowired
	MockMvc mockMvc;
	@Test
	public void createuser_XML() throws Exception {
		String userJson = "{\"name\": \"jinSeok\", \"age\": \"30\"}";
		mockMvc.perform(post("/user/create")
				.contentType(MediaType.APPLICATION_JSON_UTF8)
				.accept(MediaType.APPLICATION_XML)
				.content(userJson))
			.andExpect(status().isOk())
			.andExpect(jsonPath("$.username", 
						is(equals("jinSeok"))))
			.andExpect(jsonPath("$.age",
						is(equals("30"))));	
	}
}

controller User class 등을 볼라면 아래 글 보기

2020/04/22 - [백기선 Spring/스프링 부트 개념과 활용] - Spring Web MVC -HttpMessageConverters

 

요청 결과

 

 

만약 506 erorr 가 발생하면 HttpMessageConverter 가 없기 때문이다. pom.xml에 아래의 의존성을 추가하자

<dependency>
   <groupId>com.fasterxml.jackson.dataformat</groupId>
   <artifactId>jackson-dataformat-xml</artifactId>
   <version>2.9.6</version>
</dependency>
반응형