티스토리 뷰
URI의 path를 다양한 형태로 매핑하는 예제를 만들어 봅니다.
java
@Slf4j
@RestController
@RequestMapping("/controller/path")
public class PathVariableAPIController {
/**
* 단순 매핑 테스트
* @return
*/
@GetMapping("/{id}")
public ResponseEntity<String> simple(@PathVariable String id) {
log(id);
return ResponseEntity.ok(id);
}
/**
* required false test
* @param id
* @return
*/
@GetMapping(value = { "/requiredfalse", "/requiredfalse/{id}"})
public ResponseEntity<String> requiredfalse(@PathVariable(required = false) String id) {
return simple(id);
}
/**
* optional test
* @param id
* @return
*/
@GetMapping(value = { "/optional", "/optional/{id}"})
public ResponseEntity<String> requiredfalseOptional(@PathVariable(required = false) Optional<String> id) {
String path = id.orElse("none");
log(path);
return ResponseEntity.ok(path);
}
/**
* pathVariable 복수개인 경우 테스트
* @param id
* @param name
* @return
*/
@GetMapping("/{id}/{name}")
public ResponseEntity<Map<String, String>> multiplePaths(@PathVariable String id, @PathVariable String name) {
Map<String, String> paths = new HashMap<>();
paths.put("id", id);
paths.put("name", name);
log(paths.toString());
return ResponseEntity.ok(paths);
}
/**
* pathVariable을 Map으로 받는 경우
* @param paths
* @return
*/
@GetMapping("/map/{id}/{name}")
public ResponseEntity<Map<String, String>> multipleMapPaths(@PathVariable Map<String, String> paths) {
log(paths.toString());
return ResponseEntity.ok(paths);
}
/**
* pathVariable을 Object로 받는 경우
* @param paths
* @return
*/
@GetMapping("/object/{id}/{name}")
public ResponseEntity<MappingParams> multipleObjectPaths(MappingParams paths) {
log(paths.toString());
return ResponseEntity.ok(paths);
}
private void log(String message) {
log.debug("path :" + message);
}
@Getter
@Setter
@ToString
public static class MappingParams {
private String id;
private String name;
}
}
test
@WebMvcTest(PathVariableAPIController.class)
class PathVariableAPIControllerTest {
@Autowired
private MockMvc mockMvc;
private static final String ROOT_URI = "/controller/path";
/**
* 매핑 테스트
* @throws Exception
*/
@ParameterizedTest
@CsvSource({
ROOT_URI+"/test,test"
, ROOT_URI+"/requiredfalse/test,test"
, ROOT_URI+"/requiredfalse,"
, ROOT_URI+"/optional/test,test"
, ROOT_URI+"/optional,none"
})
void simpleMapping(String uri, String expected) throws Exception {
MockHttpServletRequestBuilder mrbuilder = MockMvcRequestBuilders.get(uri).contentType(MediaType.APPLICATION_JSON);
if(expected == null) expected = "";
MvcResult result = mockMvc.perform(mrbuilder)
.andDo(print())
.andExpect(status().isOk())
.andReturn();
String content = result.getResponse().getContentAsString();
assertThat(content).isEqualTo(expected);
}
/**
* multiple path 테스트
* @throws Exception
*/
@ParameterizedTest
@CsvSource({
ROOT_URI+"/test/eblo,test,eblo"
, ROOT_URI+"/map/test/eblo,test,eblo"
, ROOT_URI+"/object/test/eblo,test,eblo"
})
void multiplePaths(String uri, String id, String name) throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get(uri)
.contentType(MediaType.APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value(name))
.andExpect(jsonPath("$.id").value(id));
}
}
'study > springboot' 카테고리의 다른 글
011. Controller @InitBinder (0) | 2022.05.14 |
---|---|
010. Request parameter 처리 (0) | 2022.05.14 |
008. Controller request mapping (0) | 2022.05.11 |
007. 기본 설정 추가 및 실행 (0) | 2022.05.11 |
006. 사용자 배너 추가 (0) | 2022.05.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Javascript
- AG-GRID
- 엑셀
- oracle
- restful서비스
- example
- 스프링부트
- 스프링
- mybatis
- 타임리프
- mapToList
- Spring Boot
- 샘플
- lombok
- spring
- REST
- ag grid
- 그리드
- 예제
- 메시지
- 설정
- sample
- thymeleaf
- SHEETJS
- listToMap
- RESTful
- springboot
- cache
- UI
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함