간단한 Restful Server 만들기
25 Nov 2019 | SpringBootSimple Restful Server
스프링부트에서 간단히 @RestController
어노테이션이 붙은 클래스를 추가하는 것만으로
간단한 Restful 서버가 만들어집니다.
그리고 data class
클래스를 만들어서 해당 인스턴스를 반환하면 자동으로 JSON
포맷으로 전송됩니다.
간단한 예제는 다음과 같습니다.
User.kt
data class MobileDevice(var id: Int = 0, var name: String = "")
UserController.kt
@RestController class UserController { @RequestMapping("/user") fun user(): User { return User(1, "snowdeer") } }
이 상태에서 http://localhost:8080/user
주소로 접속하면 다음과 같은 결과가 출력됩니다.
{"id":1,"name":"snowdeer"}
경로 및 매개변수
이제 URL에 추가 매개변수를 넣어 필터링을 할 수가 있습니다.
매개변수에 따라 필터링되는 결과를 확인하기 위해, UserApplication.kt
파일에 다음과 같은 리스트를 추가합니다.
UserApplication.kt
@SpringBootApplication class UserApplication { companion object { val userList = ConcurrentHashMap<Int, User>() } init { userList[1] = User(1, "snowdeer") userList[2] = User(2, "ran") userList[3] = User(3, "yang") userList[4] = User(4, "downy") userList[5] = User(5, "john") } @Bean fun userList(): ConcurrentHashMap<Int, User> { return userList } } fun main(args: Array<String>) { runApplication<UserApplication>(*args) }
UserController.kt
@RestController class UserController { @Autowired private lateinit var userList: ConcurrentHashMap<Int, User> @RequestMapping("/user/{id}") fun user(@PathVariable id: Int): User? { return userList[id] } @RequestMapping("/users") fun userList(): List<User> { return userList.map(Map.Entry<Int, User>::value).toList() } }
검색어를 이용한 필터링
UserController
클래스에 search()
메소드를 추가합니다.
@RestController class UserController { @Autowired private lateinit var userList: ConcurrentHashMap<Int, User> @RequestMapping("/user/{id}") fun user(@PathVariable id: Int): User? { return userList[id] } @RequestMapping("/users") fun userList(): List<User> { return userList.map(Map.Entry<Int, User>::value).toList() } @RequestMapping("/search") fun search(@RequestParam(required = false, defaultValue = "") nameFilter: String): List{ return userList.filter { it.value.name.contains(nameFilter, true) }.map(Map.Entry<Int, User>::value).toList() } } </pre> 그런 다음, `http://localhost:8080/find?nameFilter=an`과 같이 요청을 날리면 다음처럼 결과가 나옵니다. ~~~ [{"id":2,"name":"ran"},{"id":3,"name":"yang"}] ~~~