SpringMVC-3일차

박상원·2024년 5월 13일

spring

목록 보기
6/15

@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

MockMvc.perform()

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

0개의 댓글