티스토리 뷰
728x90
1. 스프링 부트에서 REST에서 xml 형식으로 서비스를 지원하고 싶은 경우 간단하게 pom에 의존성을 추가하면 된다.
1-1 스프링 부트를 사용하지 않는 경우에는 ContentNegotiatingViewResolver를 등록하고 라이브러리 지정해야 한다.
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
1-2 jackson xml를 사용하지 않는 경우에는 JAXB를 사용할 수 있다.
1-2-1 문제는 jaxb는 java 8에 포함되어 배포되어 Java 8 버전 이상을 사용할 경우에는 jaxb를 별도로 추가해야 한다.
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
1-3 서비스 호출 시에는 Accept: text/xml를 추가해야 json이 아닌 xml형식의 서비스를 수신할 수 있다.
2. 이렇게 xml을 서비스 하게 되면 테스트 작성 시 반드시 accept 헤드를 추가하여 어떤 형식을 수신할지 지정해야 한다.
package pe.pilseong.restdemo.controller.v1;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.List;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import pe.pilseong.restdemo.api.v1.model.CategoryDTO;
import pe.pilseong.restdemo.controller.RestResponseEntityExceptionHandler;
import pe.pilseong.restdemo.domain.Category;
import pe.pilseong.restdemo.service.CategoryService;
import pe.pilseong.restdemo.service.ResourceNotFoundException;
public class CategoryControllerTest {
@Mock
CategoryService categoryService;
@InjectMocks
CategoryController categoryController;
MockMvc mockMvc;
private static final String NAME = "Ebook";
private static final long ID = 1L;
Category category;
CategoryDTO categoryDto;
@BeforeEach
public void setup() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(categoryController)
.setControllerAdvice(new RestResponseEntityExceptionHandler())
.build();
category = new Category();
category.setId(ID);
category.setName(NAME);
categoryDto = new CategoryDTO();
categoryDto.setId(ID);
categoryDto.setName(NAME);
}
@Test
public void listCategories() throws Exception {
List<CategoryDTO> categories = Arrays.asList(new CategoryDTO(), new CategoryDTO());
// given
when(categoryService.getCategories()).thenReturn(categories);
mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/categories")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.categories", Matchers.hasSize(2)));
}
@Test
public void getCategoryByName() throws Exception {
when(categoryService.getCategoryByName(anyString())).thenReturn(categoryDto);
mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/categories/Ebook")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.name", Matchers.equalTo(NAME)));
}
@Test
public void getCategoryByNameNotFound() throws Exception {
when(categoryService.getCategoryByName(anyString())).thenThrow(ResourceNotFoundException.class);
mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/categories/Ebook").contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isNotFound());
}
}
728x90
'Spring > Spring REST' 카테고리의 다른 글
Spring REST : Spring REST Docs 사용하기 (0) | 2020.09.18 |
---|---|
Spring REST : REST XML 클래스 만들기 using JAXB (0) | 2020.09.17 |
Spring REST : OpenAPI 3.0 설정 (0) | 2020.09.05 |
Spring REST : Swagger2 설정하기 (0) | 2020.09.04 |
Spring REST : MapStuct (0) | 2020.09.02 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
TAG
- one-to-one
- Angular
- form
- MYSQL
- jsp
- 상속
- 외부파일
- Security
- 하이버네이트
- one-to-many
- hibernate
- RestTemplate
- 스프링
- 설정하기
- mapping
- Validation
- 설정
- crud
- 스프링부트
- Spring Security
- WebMvc
- spring boot
- XML
- 자바
- login
- 로그인
- Rest
- 매핑
- Spring
- Many-To-Many
250x250