728x90
User 에 대하여 RESTful API를 만들어본다.
아주 기본적인 User 객체부터 만들어보자.
@Data
public class User {
private Long id;
private String name;
private Integer age;
}
어 ? @Data 저거는 뭐지? 하는 분들을 위해 lombok 이라는 라이브러리를 간단하게 설명드린다.
lombok 은 java에서 객체를 만들때 getter , setter 코드를 컴파일 단계에서 자동으로 만들어주는 라이브러리다. 이놈 없이도 개발 가능하지만 getter, setter 만 만들다가 중도에 포기할수도 있다.
사용하고자 하는 library를 추가 ,다들 dependency를 추가한다고 하지.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
controller 작성
@RestController
@RequestMapping(value = "/users")
public class UserController {
static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());
@GetMapping("/")
public List<User> getUserList() {
List<User> r = new ArrayList<User>(users.values());
return r;
}
@PostMapping("/")
public String postUser(@RequestBody User user) {
users.put(user.getId(), user);
return "success";
}
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return users.get(id);
}
@PutMapping("/{id}")
public String putUser(@PathVariable Long id, @RequestBody User user) {
User u = users.get(id);
u.setName(user.getName());
u.setAge(user.getAge());
users.put(id, u);
return "success";
}
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable Long id) {
users.remove(id);
return "success";
}
}
만들었으니 테스트도 해보자
@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter21ApplicationTests {
private MockMvc mvc;
@Before
public void setUp() {
mvc = MockMvcBuilders.standaloneSetup(new UserController()).build();
}
@Test
public void testUserController() throws Exception {
RequestBuilder request;
request = get("/users/");
mvc.perform(request)
.andExpect(status().isOk())
.andExpect(content().string(equalTo("[]")));
request = post("/users/")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"id\":1,\"name\":\"테스트 합니다.\",\"age\":20}");
mvc.perform(request)
.andExpect(content().string(equalTo("success")));
request = get("/users/");
mvc.perform(request)
.andExpect(status().isOk())
.andExpect(content().string(equalTo("[{\"id\":1,\"name\":\"테스트 합니다.\",\"age\":20}]")));
request = put("/users/1")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"name\":\"테스트 합니다.\",\"age\":30}");
mvc.perform(request)
.andExpect(content().string(equalTo("success")));
request = get("/users/1");
mvc.perform(request)
.andExpect(content().string(equalTo("{\"id\":1,\"name\":\"테스트 합니다.\",\"age\":30}")));
request = delete("/users/1");
mvc.perform(request)
.andExpect(content().string(equalTo("success")));
request = get("/users/");
mvc.perform(request)
.andExpect(status().isOk())
.andExpect(content().string(equalTo("[]")));
}
}
MockMvc 를 처음 사용해 보시는 분이라면 일부 함수가 존재 하지 않는다는 메시지가 있을것이다. 상단에 아래 패키지들이 잘 import 되었는지도 살피자!
import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
끝!
'Springboot2.x 강좌 > API개발' 카테고리의 다른 글
SpringFox 3 및 Swagger 설정 (0) | 2023.01.04 |
---|---|
프로젝트 구동 시 RequestMappingHandler 로그 설정 (0) | 2023.01.04 |
Swagger 의 api 들을 효율적으로 분리하기 (0) | 2023.01.04 |
JSR-303 그리고 validation 체크 (0) | 2023.01.04 |
문서자동화 도구 Swagger2를 사용해보자 (0) | 2023.01.04 |