@Value
- org.springframework.beans.factory.annotation.Value
- 어떤 값을 표현하는 어노테이션
- 필드, 메서드, 파라미터, 생성자 파라미터에 사용
Spring EL(Expression Language) 표현 식
@Value("#{systemProperties.myProp}")
- 리터럴 표현식
- Boolean과 관계연산자
- 정규 표현식
- 클래스 표현식
- 프로퍼티, 배열, 리스트, 맵에 대한 접근 지원
- 메서드 호출
- 관계연산자
- 할당
- 생성자 호출
- Bean 참조
- 배열 생성
- 인라인 리스트/맵
- 삼항 연산자
- 변수
- 사용자 정의 함수
- Collections Projection
- Collections Selection
- Templated expression
Property Placeholder
@Value("${my.app.myProp}")
Content Negotiation
/user/{userId}
- Content-type: application/xml
/users/{userId}
- Content-type: application/json
내용
Content Negotiation
- 동일한 내용을 어떤 포맷으로 응답할 것인지 결정하는 전략
- 특정 parameter 값을 보고 결정할 것인지
- Accept Header를 보고 결정할 것인지
- HttpMessageConverter에서 적용
Content Negotiation 설정
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorParameter(true)
.parameterName("format")
.ignoreAcceptHeader(true)
.defaultContentType(MediaType.APPLICATION_JSON)
.mediaType("json", MediaType.APPLICATION_JSON)
.mediaType("xml", MediaType.APPLICATION_XML);
}
}
Spring MVC Testing
MockMvc
- Spring MVC 테스트의 주요 진입점(main entry point)
- Web Application을 서버에 배포하지 않고 테스트할 수 있는 MVC환경을 구성하여 요청, 전송 등 응답기능을 제공해주는 Utility class
ResultActions perform(RequestBuilder requestBuilder) throws Exception
- MockMvcRequestBuilders : RequestBuilder용 정적 팩토리 메서드들 제공
- get()
- post()
- put()
- delete()
- fileUpload()
- ...
MockMvcBuilder
StandaloneMockMvcBuilder
- ApplicationContext 없이 Spring MVC 유닛 테스트(unit test) 수행
MockMvcBuilders.standaloneSetup(Object... controllers)
DefaultMockMvcBuilder
- ApplicationContext를 가지고 Spring MVC 통합 테스트(integration test) 수행
MockMvcBuilders.webAppContextSetup(WebApplicationContext context)
StandaloneMockMvcBuilder
- setControllerAdvice()
- setVlidator()
- setConversionService()
- addInterceptors()
- setContentNegotiationManager()
- setCustomArgumentResolvers()
- setHandlerExceptionResolvers()
- setViewResolvers()
- setLocaleResolver()
- ...
DefaultMockMvcBuilder
JUnit Runner 설정
- 스프링 테스트 컨텍스트 프레임워크의 JUnit 기능 확장
@ExtendWith(SpringExtension.class)
WebApplicationContext 사용 설정
- default web root: src/main/webapp
@WebAppConfiguration
ApplicationContext 로딩
- @ContextHierarchy/@ContextConfiguration
@ContextHierarchy({
@ContextConfiguration(classes = {RootConfig.class}),
@ContextConfiguration(classes = WebConfig.class)
})
@Transactional
- 트랜잭션 내에서 테스트를 수행하고 테스트 종료 후 자동 롤백
- @Rollback